函数原型: int feof(FILE *stream);
功能:检测流上的文件结束符
返回值:feof(fp)有两个返回值:如果遇到文件结束,函数feof(fp)的值为非零值,否则为0。
什么时候结束了,当读取到那个字节为0xFF时,就结束了。
EOF是文本文件结束的标志,在文本文件中都是以ASCII码字符表示的,取值范围 0-127 共128个字符,EOF的16进制代码为0x1A(十进制为26),因此可以用EOF作为文件结束标志。
而在二进制文件中,就会有-1值的出现,因此不能采用EOF作为二进制文件的结束标志,为解决这一个问题,ASCI C提供一个feof函数,用来判断文件是否结束。feof函数既可用以判断二进制文件又可用以判断文本文件。
feof函数要读取到最后一个位置的内容,要强调位置和内容,举例说,我叫你去火车的最后一节车厢,这就是位置,我叫你一直往前走,直到摸到铁轨,这就是内容。所以feof函数实际上是根据读取到最后一个位置的内容来判断的。所以要多走一字节。
大家,经常要按行读取文件,总会遇到麻烦。我用代码说吧:
文本内容
hello
world
while(!feof(fp))
{
char buf[30];
fgets(buf,30,fp);
printf("%s",buf);
printf("%d\n",strlen(buf));
char ch = fgetc(fp);//这就是多读一字节,来判断是否结束
if(ch == EOF)//the end file
{
break;
}
fseek(fp,-1,SEEK_CUR);
}