fgetc()函数从Ubuntu中的文本文件读取字符。

EoF之前的最后一个字符的代码= -1。

那是什么呀?
在文本编辑器文件中看起来还可以,结尾没有奇怪的符号。

while (!feof(fp))
{
    c = fgetc(fp);
    printf("%c %i\n", c, c);//
}

最佳答案

feof表示您已尝试读取文件结尾以外的内容-这意味着您必须先到达该文件。因此,只有在您尝试阅读并且系统意识到您已经结束时,它才起作用。如果尝试读取文件末尾之后,fgetc返回什么? EOF(通常为-1-这就是fgetc返回int而不是char的原因)。

因此,发生的事情是您进入循环-因为您尚未尝试在末尾读取过去-并调用fgetc返回-1,因为您尝试读取文件末尾。下次在循环中,feof告诉您已经到达文件末尾并试图读取过去,然后中断。

您应该阅读打算使用的功能的文档:feoffgetc文档对此进行了说明。但是,即使他们没有这样做,简单的Google搜索也可以回答您的问题:Why is “while ( !feof (file) )” always wrong?

关于c - fgetc读取值= -1的字符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34245695/

10-11 01:18