在阅读C99草案ISO/IEC 9899:TC2 WG14/N1124时,我偶然发现了令我担忧的一些陈述:
如果fgets
返回fgets
,则NULL
的字符串/缓冲区是否也会被保证为空终止?
§7.19.7.2在说明中陈述
一个 在读入数组的最后一个字符后立即写入空字符。
但在回报中:
如果在操作期间发生读取错误,则数组内容为 不确定并返回空指针。
因此,在我的解释中,最后一个陈述暗示在任何NULL
- 返回案例中都没有给出这种保证。
我已经要纠正http://en.cppreference.com,因为他们正在使用errno
fgets
没有义务设置。但我不确定我是否可能误解了这一点。
答案 0 :(得分:3)
您正确解释标准。如果有错误,该函数将返回NULL,并且不会信任缓冲区的内容。
这允许fgets
直接读入目标缓冲区,中间没有任何双缓冲区。因此,在预期数据中途出错时,它可能只是停止并返回NULL。
另请注意此特例(7.21.7.2):
如果遇到文件结尾且没有读入任何字符 在数组中,数组的内容保持不变并且为null 返回指针。