引言
做课设的时候踩到这个坑,跟大家分享一下
feof()函数
看一下下面的代码
#include<stdio.h>
int main()
{
FILE *fp = fopen("try", "w");
if (feof(fp) == 1)
puts("文件已结束");
else
puts("文件未结束");
return 0;
}
输出:文件未结束
照理说,w参数打开的文件里面应该只有EOF才对啊,为什么会返回0呢?
查阅资料后:
feof函数
检测流上的文件结束符,如果文件结束,则返回非0值,否则返回0(即,文件结束:返回非0值,文件未结束,返回0值)
int feof(FILE *stream);
注意:feof判断文件结束是通过读取函数fread/fscanf等返回错误来识别的,故而判断文件是否结束应该是在读取函数之后进行判断。比如,在while循环读取一个文件时,如果是在读取函数之前进行判断,则如果文件最后一行是空白行,可能会造成内存错误。
原来出错的原因在这里,建议改成如下形式:
#include<stdio.h>
int main()
{
FILE *fp = fopen("try", "w");
char temp[50];
if (fread(temp, sizeof(temp), 1, fp) != 1)
puts("文件已结束");
else
puts("文件未结束");
return 0;
}
输出:文件已结束
直接利用读文件函数的返回值来判断是否到达结尾。