好的,我确定这里有一些我不知道的东西,但我不知道它是什么,我希望有人可以帮助我解决这个问题。
我正在从命令行读取输入,并且正在编写一个使用fgetc()执行此操作的函数。然而,功能看似肤浅的变化导致它的行为完全不同。
这是main()函数:
while(1)
{
char* cmd = malloc(sizeof(char) * 80);
printf("Enter command: ");
read_flush(cmd, 80);
printf("%s\n", cmd);
free(cmd);
}
这是read_flush()的一个版本:
int read_flush(char* buffer, int count)
{
int i, c;
for(i = 0; i < count; i++)
{
c = fgetc(stdin);
if(c == '\n' || c == EOF)
return i;
buffer[i] = (char)c;
}
return i;
}
这个工作正常。你键入输入,它会吐出来。 但是,下一个版本会导致main只是反复打印“输入命令:”,而不会让用户输入输入。
int read_flush(char* buffer, int count)
{
int i, c;
while(i < count)
{
c = fgetc(stdin);
if(c == '\n' || c == EOF)
return i;
buffer[i] = (char)c;
i++;
}
return i;
}
我在这里错过了fgetc()的微妙之处?
答案 0 :(得分:1)
尝试在第二个i
实施中初始化read_flush
。
答案 1 :(得分:1)
在第二个版本中,您似乎没有像在第一个版本中那样将i初始化为零。所以它可能以大于count的垃圾值开始,因此循环永远不会执行。
答案 2 :(得分:1)
两个版本都有相同的错误。您不在字符串的末尾添加NUL。 malloc不会初始化它返回的内存。