相信很多C语言初学者都遇到过这种情况:
使用
while(!feof(fp))
{
fscanf(...);
//或者
//fread(...)
}
读文件时经常会重复读最后一段字符。
实际上这并非feof()函数的bug,只是我们不了解feof()函数的性质。
feof()的性质:
只有当文件位置指针指向文件末尾,再发生读/写操作,然后再调用feof()时,才会得到文件结束的信息。
因此,正确的读取文件方法如下:
char buf[1024];
fread(buf, 1024, 1, fp);
while (!feof(fp))
{
//TODO:
fread(buf, 1024, 1, fp);
}