【问题标题】:fgetc reads character with value = -1fgetc 读取 value = -1 的字符
【发布时间】:2015-12-12 22:22:06
【问题描述】:

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

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

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

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

【问题讨论】:

标签: c linux function text fgetc


【解决方案1】:

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

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

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

【讨论】:

  • 要清楚 feof 确实 not 表示文件结束。它通知已经尝试读取文件的末尾过去。所以它直到 OP 读取了 EOF 标志之后才返回 true,这不是文件内容的一部分。
  • 同时解释为什么c应该被定义为int
猜你喜欢
  • 1970-01-01
  • 2011-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-13
相关资源
最近更新 更多