在c中使用getchar()获取分段错误(核心转储)

时间:2012-02-04 00:09:50

标签: c getchar

我正在编写一个程序,要求我输入一系列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();
}

然后它工作正常,但我想使用换行而不是%。我看过几个教程,他们说这是输入的方法,直到输入命中,所以我不确定问题是什么。提前谢谢。

3 个答案:

答案 0 :(得分:2)

您可以使用:

while((temp = getchar())!= EOF&& temp!='\ n')

答案 1 :(得分:2)

问题在于:

input[strlen(input)] = temp;

这很容易导致缓冲区溢出,因为无法保证下一个字符是' \ 0'表示字符串的结尾。你需要为输入的结尾添加边界检查 - 它只有很多空间,你需要在temp' \ 0';

之后制作下一个字符。

另外,正如Tom所建议的那样,你一定要考虑使用fgets。 (编辑:抱歉,我阅读并输入了获取,但我也在考虑fgets)

答案 2 :(得分:1)

如果你想要做的就是阅读fgets,你可以考虑使用\nHere's a page on it.

您不应该使用gets