fgetc 读取值为 -1 的字符

fgetc reads character with value = -1

fgetc() 函数从 Ubuntu.

中的文本文件中读取字符

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

这到底是什么? 在文本编辑器文件中似乎没问题,末尾没有奇怪的符号。

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

feof 表示您已尝试阅读 过去 文件末尾 - 这意味着您首先必须到达它。因此,只有在您尝试阅读并且系统意识到您已阅读完毕后,它才会起作用。如果您尝试读取超过文件末尾,fgetc return 会怎样? EOF(方便地,-1 - 这就是为什么 fgetc return 是 int 而不是 char)。

所以发生的事情是你进入循环 - 因为你还没有尝试在最后阅读过去 - 并调用 fgetc which returns -1 因为你试图读取文件末尾。下一次循环时,feof 告诉您已经到达文件末尾并尝试读取它,然后您就跳出。

您应该阅读您打算使用的函数的文档:feoffgetc 文档对此进行了解释。但即使他们没有,一个简单的 google 搜索也会回答您的问题:Why is “while ( !feof (file) )” always wrong?.