查看ISO C11标准关于fgets
§7.21.7.2, 3的内容,其中关于代码概要中返回值已经说明:
#include <stdio.h>
char *fgets(char* restrict s, int n, FILE* restrict stream);
fgets函数在成功时返回s。如果遇到文件结尾并且没有将任何字符读入数组中,则数组内容保持不变,并返回空指针。如果在操作期间发生读取错误,则数组内容是不确定的,并返回空指针。
标准规定,无论是遇到文件结尾并且没有读取任何字符,还是发生读取错误,都会返回空指针。我的问题是,仅从fgets
和返回的空指针,是否有办法区分导致错误的两种情况?
ferror()
有其存在的理由。 - too honest for this sitefeof()
和ferror()
函数是为此而设计的。请注意,while (!feof(file))
始终是错误的。 - Jonathan Leffler