2014-09-29 135 views
0

非常簡單,我試圖總結命令行中輸入的所有整數。總和實際上起作用,如果我用「1 1 1 1」輸入啓動程序,總和增加一次四次。問題是,總和初始化在一些非常大的數字(4293283588)。這是爲什麼?總結命令行

int main(int argc, char*argv[]) 
{ 
    int a = 0; 
    int sum = 0; 
    size_t i = 0; 

    for (i=0; i<argc; i++) 
    { 
    a = atoi(argv[i]); 
    sum = sum + a; 
    printf("%ld\n", sum); 
    } 

    return 0; 
} 
+0

我們可以看到'notAtoi'的函數定義嗎? – squiguy 2014-09-29 00:31:21

+0

我的錯誤,它在功能上是一樣的atoi – Broaj 2014-09-29 00:34:24

+1

'I = 0' - >'I = 1'在了,'INT總和= 0;' - >'長總和= 0;' – BLUEPIXY 2014-09-29 00:38:41

回答

4

argv[0]也許是可執行文件的名稱。從標準:

5.1.2.2.1計劃啓動

....

如果argc值大於零,則指向的字符串argv[0] 代表程序名稱; argv[0][0]應爲空字符,如果 程序名稱不能從主機環境。如果argc值大於一個 時,琴絃通過argv[argc-1] 指向argv[1]
代表程序參數

嘗試

for (i=1; i<argc; i++) 

另外,作爲@BLUEPIXY所示,%ld假定鍵入long。所以要麼將其更改爲%d,要麼使用long sum

+0

這是正確的。 'argv'是用於啓動可執行文件的完整命令,未經處理,除了用空格標記。 – 2014-09-29 00:36:53

+0

aaah好吧。我不知道argv [0]是什麼。我現在知道了。 – Broaj 2014-09-29 00:38:01

+1

@Woodrow不,它實際上是實現定義的。 ' - argv [argc]應該是一個空指針。 - 如果的argc的值是大於零,陣列成員的argv [0]〜 的argv [的argc-1]包括應包含指向字符串,其通過編程啓動之前的主機環境給出 實現定義的值。 的意圖是向程序提供在程序啓動之前確定的信息, – 2014-09-29 00:59:22