2013-11-14 196 views
0

我不知道爲什麼這個代碼保持崩潰:程序崩潰

int main(void) 
{ 
char input[13]; 
int i; 

fgets(input,sizeof(input),stdin); 
i = atoi(input[0]); 

return 0; 
} 

如果我輸入「1」(不含引號)程序崩潰。編譯器是mingw。

回答

3

它崩潰,因爲atoi需要char *。在這種情況下,當你給它一個char時,沒有任何東西可以告訴編譯器提供的值不是真的指向別的東西。程序最終崩潰。

你可以改變這兩種:

i = atoi(input);

i = atoi(&input[0]);

+0

沒有足夠的代表評論其他答案,但是如果你想單獨使用值'1234',你最好迭代字符串,並使用charValue - '0'來獲取int值。 – sgwizdak

2

atoi要求char *(C字符串)不是一個單獨的char。變化:

i = atoi(input[0]); 

到:

i = atoi(input); 

另外請注意,你應該總是啓用警告(如gcc -Wall ...)編譯器 - 如果你已經做到了這一點,則編譯器會很有幫助指出你的錯誤的您。

+1

請告訴爲什麼?否則,這看起來像魔術。 –

+0

所以我想atoi需要\ 0字符。如果我輸入1234並且我想要每個個人數字怎麼辦? – MABC