2013-11-14 162 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