我不知道为什么这个代码保持崩溃:程序崩溃
int main(void)
{
char input[13];
int i;
fgets(input,sizeof(input),stdin);
i = atoi(input[0]);
return 0;
}
如果我输入“1”(不含引号)程序崩溃。编译器是mingw。
我不知道为什么这个代码保持崩溃:程序崩溃
int main(void)
{
char input[13];
int i;
fgets(input,sizeof(input),stdin);
i = atoi(input[0]);
return 0;
}
如果我输入“1”(不含引号)程序崩溃。编译器是mingw。
它崩溃,因为atoi
需要char *
。在这种情况下,当你给它一个char
时,没有任何东西可以告诉编译器提供的值不是真的指向别的东西。程序最终崩溃。
你可以改变这两种:
i = atoi(input);
或
i = atoi(&input[0]);
atoi
要求char *
(C字符串)不是一个单独的char
。变化:
i = atoi(input[0]);
到:
i = atoi(input);
另外请注意,你应该总是启用警告(如gcc -Wall ...
)编译器 - 如果你已经做到了这一点,则编译器会很有帮助指出你的错误的您。
请告诉为什么?否则,这看起来像魔术。 –
所以我想atoi需要\ 0字符。如果我输入1234并且我想要每个个人数字怎么办? – MABC
没有足够的代表评论其他答案,但是如果你想单独使用值'1234',你最好迭代字符串,并使用charValue - '0'来获取int值。 – sgwizdak