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
告诉您已经到达文件末尾并尝试读取它,然后您就跳出。
您应该阅读您打算使用的函数的文档:feof
和 fgetc
文档对此进行了解释。但即使他们没有,一个简单的 google 搜索也会回答您的问题:Why is “while ( !feof (file) )” always wrong?.
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
告诉您已经到达文件末尾并尝试读取它,然后您就跳出。
您应该阅读您打算使用的函数的文档:feof
和 fgetc
文档对此进行了解释。但即使他们没有,一个简单的 google 搜索也会回答您的问题:Why is “while ( !feof (file) )” always wrong?.