如果返回NULL,则由fgets保证空终止

时间:2016-03-08 13:11:42

标签: c stdio

在阅读C99草案ISO/IEC 9899:TC2 WG14/N1124时,我偶然发现了令我担忧的一些陈述:

如果fgets返回fgets,则NULL的字符串/缓冲区是否也会被保证为空终止?

§7.19.7.2在说明中陈述

  

一个   在读入数组的最后一个字符后立即写入空字符。

但在回报中:

  

如果在操作期间发生读取错误,则数组内容为   不确定并返回空指针。

因此,在我的解释中,最后一个陈述暗示在任何NULL - 返回案例中都没有给出这种保证。 我已经要纠正http://en.cppreference.com,因为他们正在使用errno fgets没有义务设置。但我不确定我是否可能误解了这一点。

1 个答案:

答案 0 :(得分:3)

您正确解释标准。如果有错误,该函数将返回NULL,并且不会信任缓冲区的内容。

这允许fgets直接读入目标缓冲区,中间没有任何双缓冲区。因此,在预期数据中途出错时,它可能只是停止并返回NULL。

另请注意此特例(7.21.7.2):

  

如果遇到文件结尾且没有读入任何字符   在数组中,数组的内容保持不变并且为null   返回指针。