【发布时间】:2017-07-23 04:33:22
【问题描述】:
在查看fgets §7.21.7.2, 3 的 ISO C11 标准时,返回值与概要代码有关:
#include <stdio.h>
char *fgets(char* restrict s, int n, FILE* restrict stream);
如果成功,fgets 函数会返回 s。如果遇到文件结尾并且没有字符被读入数组,则数组的内容保持不变并返回一个空指针。如果在操作过程中发生读取错误,则数组内容不确定,返回空指针。
该标准规定,对于文件结束返回空指针并且没有读入任何字符或发生读取错误。我的问题是,仅仅从fgets,以及返回的空指针,有没有办法区分这两种情况中的哪一种导致了错误?
【问题讨论】:
-
我怀疑
ferror()是有原因的。 -
函数
feof()和ferror()就是为此而设计的。请注意while (!feof(file))is always wrong. -
请注意,在您回答之前...“仅来自 fgets,以及返回的空指针”
-
无论如何,如果您将输入缓冲区设置为全 0,您还可以看到已部分读取的内容。
-
@Frankie_C--“如果在操作过程中发生读取错误,则数组内容不确定”。