2014-12-02 160 views
0

我不知道爲什麼這個簡單的代碼是給我的錯誤分割故障三

#include <stdio.h> 
#include <unistd.h> 
#include <sysexits.h> 
#include <stdlib.h> 
#include <string.h> 

int main (int argc, char *argv[]){ 

     if(argc == 2){ 
      double i; 
      char *finalPtr; 
      double h = strtod(argv[2], &finalPtr); 
      for(i=1;i<=h;i++){ 
        printf("\t%g\n", i); 
      } 
      return 0; 
      exit(EX_OK); 
     } 
return 0; 
} 

我supose這是由於*finalPtr,但我不明白爲什麼閱讀分割的錯,但我依然。看來我並不真正瞭解C中的內存使用情況......

回答

6

正在驗證是否僅針對兩個命令行參數。

double h = strtod(argv[2], &finalPtr);

應該是:

double h = strtod(argv[1], &finalPtr);

這是因爲: argc == 2這意味着命令行參數數目是2其中
的第一個參數的argv [0]將是可執行文件/二進制文件的名稱,第二個參數argv [1]將是命令lin由用戶

+0

謝謝。我被指針所迷惑,我沒有看到那個錯誤! – 2014-12-02 12:30:46

+0

@marckamoedo:歡迎 – 2014-12-02 12:31:29

+0

@marckamoedo不錯,體面和接受這個答案,不僅你獎勵回答者,而且未來的潛在問答者會看到,在這個問題的解決方案已被發現 – 4rlekin 2014-12-02 12:32:44

0

傳遞ÊARG由0

時間不限偏移,這remeber。

把它看成是mem,+ 1 * argv就夠了。

+0

正確的答案,但我沒有看到回答已經回答(基本接受)的問題的一個觀點,尤其是在回答信息略少於接受的回答 – 4rlekin 2014-12-02 12:47:58