1

我正在编写一个程序,它要求我输入一系列字符,这些字符被加载到一个字符数组中以供以后使用。我试图开始工作的代码如下所示:

char temp = getchar();
while(temp != '\n'){//input char into temp until '\n'
    input[strlen(input)] = temp;//adds temp to end of input
    temp = getchar();
}

但是当我到达程序中的这一行时,我得到“分段错误(核心转储)”并崩溃。当我用另一个字符替换 \n 时,例如 %

char temp = getchar();
while(temp != '%'){//input char into temp until '\n'
    input[strlen(input)] = temp;//adds temp to end of input
    temp = getchar();
}

那么它工作正常,但我想使用换行符而不是 %. 我看过几个教程,他们说这是在输入之前如何输入,所以我不确定问题是什么。提前致谢。

4

3 回答 3

2

你可以使用这个:

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

于 2012-02-04T00:15:17.827 回答
2

问题在这里:

input[strlen(input)] = temp;

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

此外,正如 Tom 所建议的,您绝对应该考虑使用 fgets。(编辑:对不起,我阅读并输入了gets,但我也在考虑fgets)

于 2012-02-04T00:18:37.520 回答
1

fgets如果您只想阅读,则可以考虑使用\n这是它的一个页面。

你不应该使用gets.

于 2012-02-04T00:17:06.623 回答