fgetc读取值为-1的字符

时间:2015-12-12 22:22:06

标签: c linux function text fgetc

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

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

那是什么意思? 在文本编辑器文件中似乎没问题,最后没有奇怪的符号。

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

1 个答案:

答案 0 :(得分:1)

feof表示您已尝试阅读过去文件末尾 - 这意味着您首先需要访问它。因此,只有在您尝试阅读并且系统意识到您最终完成后它才会起作用。如果您尝试读取文件末尾,fgetc会返回什么? EOF(方便地-1 - 这就是fgetc返回int而不是char的原因。

所发生的事情是你进入循环 - 因为你还没有尝试在最后读过去 - 并且调用fgetc,它返回-1,因为你试图读过文件的末尾。下一次循环,feof告诉你,你已经到了文件的末尾,并试图读过去,然后你就会爆发。

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