例如此数据文件abc.txt
abc
请注意,底部没有换行符。
当我用C编写以下程序时
#include <stdio.h>
int main(){
FILE *fp = fopen("abc.txt","rb"); // NOTE this is "rb"
while (!feof(fp)){
fprintf(stdout, "%c", fgetc(fp));
fprintf(stdout, "%d", feof(fp));
}
fclose(fp);
return 0;
}
标准输出结果是这样的:
[xxx@xxx hello]$ ./a.out
a0b0c0
0�1[xxx@xxx hello]$
最后一行中的额外输出字节是什么?
feof
报告是否设置了EOF指示器,当您尝试读取文件末尾时设置了该指示器。因此,最后一个fgetc
会读取文件末尾的内容,返回EOF
(通常为-1),然后feof
返回1。