feof和ferror函数,C语言feof和ferror函数详解

  • 内容
  • 评论
  • 相关

正如前面所讲,fgetc(或者getc)函数返回 EOF 并不一定就表示文件结束,读取文件出错时也会返回 EOF。即 EOF 宏不但能够表示读到了文件结尾这一状态,而且还能表示 I/O 操作中的读、写错误以及其他一些关联操作的错误状态。很显然,仅凭返回 EOF(-1) 就认为文件结束显然是不正确的。

也正因为如此,我们需要使用 feof 函数来替换 EOF 宏检测文件是否结束。当然,在用 feof 函数检测文件是否结束的同时,也需要使用 ferror 函数来检测文件读取操作是否出错,当 ferror 函数返回为真时就表示有错误发生。在实际的程序中,应该每执行一次文件操作,就用 ferror 函数检测是否出错。

其中,文件结束检测函数 feof 的一般原型如下:

int feof(FILE *fp);

值得注意的是,函数 feof 只用于检测流文件,当文件内部位置指针指向文件结束时,并未立即置位 FILE 结构中的文件结束标记,只有再执行一次读文件操作,才会置位结束标志,此后调用 feof 才会返回为真。看下面的示例代码:

int main(void)
{
    FILE *fp=NULL;
    char c;
    fp=fopen("myfile.txt","r");
    if(fp == NULL)
    {
        printf("不能够访问该文件.\n");
        exit(1);
    }
    while(!feof(fp))
    {
        c = fgetc(fp);
        printf("%c:\t%x\n",c,c);
    }
    fclose(fp);
    fp=NULL;
}

这里假设“myfile.txt”文件中存储的是“ABCDEF”,从表面上看,该示例代码的输出结果应该是“ABCDEF”。但实际情况并非如此,你会发现最终输出结果会多输出一个结束字符EOF(这里的 EOF 是 fgetc 函数的返回值,并不是文件中存在的 EOF),运行结果如图 1 所示。



图 1 示例代码的运行结果(Microsoft Visual Studio 2010)

本文标题:feof和ferror函数,C语言feof和ferror函数详解

本文地址:http://www.hosteonscn.com/2794.html

评论

0条评论

发表评论

邮箱地址不会被公开。 必填项已用*标注