我正在编写一个程序,要求我输入一系列char,这些char被加载到char数组中以供以后使用。我试图开始工作的代码如下:
char temp = getchar();
while(temp != '\n'){//input char into temp until '\n'
input[strlen(input)] = temp;//adds temp to end of input
temp = getchar();
}
但是当我在程序中到达这一行时,我得到“Segmentation fault(core dumped)”并崩溃.. 当我用另一个char替换\ n时,例如%
char temp = getchar();
while(temp != '%'){//input char into temp until '\n'
input[strlen(input)] = temp;//adds temp to end of input
temp = getchar();
}
然后它工作正常,但我想使用换行而不是%。我看过几个教程,他们说这是输入的方法,直到输入命中,所以我不确定问题是什么。提前谢谢。
答案 0 :(得分:2)
您可以使用:
while((temp = getchar())!= EOF&& temp!='\ n')
答案 1 :(得分:2)
问题在于:
input[strlen(input)] = temp;
这很容易导致缓冲区溢出,因为无法保证下一个字符是' \ 0'表示字符串的结尾。你需要为输入的结尾添加边界检查 - 它只有很多空间,你需要在temp' \ 0';
之后制作下一个字符。另外,正如Tom所建议的那样,你一定要考虑使用fgets。 (编辑:抱歉,我阅读并输入了获取,但我也在考虑fgets)
答案 2 :(得分:1)
如果你想要做的就是阅读fgets
,你可以考虑使用\n
。 Here's a page on it.
您不应该使用gets
。