【发布时间】:2019-04-22 12:38:15
【问题描述】:
如果输入的长度大于2,为什么这段代码会多次跳过循环?
这似乎与缓冲区溢出有关。但是我可以在循环结束时清除输入缓冲区吗?如何?
#include <stdio.h>
int main(void)
{
char in[2];
while (in[0] != 'q') {
puts("Enter: ");
fgets(in, 3, stdin);
}
return 0;
}
我想要求用户在每个循环中输入一些字符串。
【问题讨论】:
-
不是
3,而是2forfgets。缓冲区只有 2 大。 -
你能给我看一些这个具体问题的例子吗?
-
不,这与缓冲区溢出无关。这只是一个偶然。而且我不知道为什么有人认为这值得支持。您的问题是
fgets如果行长于缓冲区,则不会跳过所有内容直到行尾。 -
您告诉
fgets,您的缓冲区足够大,可以容纳 2 个字符和一个空字符 ('\0')。但是你的缓冲区只够容纳 1 个字符加上'\0'。 -
当输入长度超过1时,fgets尝试写入超出数组边界的数据。之后你的程序的行为是未定义的。