使用fgets和feof

时间:2019-06-17 16:01:33

标签: c

具有简单的文本文件,例如myfile1.txt:

cat myfile1.txt:

abc

及以下代码

# include <stdio.h>
# include <string.h>
# include <errno.h>
# include <unistd.h>


char mybuffer[80] = "abc\n";
char* result = NULL;

int main() {
        FILE* pFile;
        pFile = fopen ("myfile1.txt", "r+");
        int c;

        if (pFile == NULL)
                perror ("Error opening file");
        else {
                result = fgets(mybuffer, 80, pFile);

                if (feof(pFile)) {
                        printf("fgets EOF");
                }

                fclose (pFile);
                return 0;
        }
}

为什么函数feof在到达流的末尾时不返回非零值(fgets得到3个字符“ abc”并达到EOF)?

1 个答案:

答案 0 :(得分:1)

因为feof()在尝试读取文件末尾之前不会返回true。

根据文档:

  

检查是否设置了与流关联的文件结束指示符,如果返回,则返回一个不同于零的值。

     

此指示器通常由尝试在文件末尾读取的流上的先前操作设置。