0

我不知道为什么这段代码不断崩溃:

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

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

return 0;
}

如果我输入“1”(不带引号),程序就会崩溃。编译器是mingw。

4

2 回答 2

3

它崩溃是因为atoi需要一个char *. 在这种情况下,当你给它一个char时,没有什么可以告诉编译器所提供的值实际上并不是指向其他东西的指针。所以程序最终崩溃了。

您可以将其更改为:

i = atoi(input);

或者

i = atoi(&input[0]);

于 2013-11-14T22:06:18.517 回答
2

atoi需要char *(C 字符串) 而不是单个char. 改变:

i = atoi(input[0]);

至:

i = atoi(input);

另请注意,您应该始终在启用警告的情况下进行编译(例如gcc -Wall ...) - 如果您这样做了,那么编译器会帮助您指出您的错误。

于 2013-11-14T21:57:37.297 回答