C语言 如果返回 NULL 则由 fget 提供空终止保证



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

如果fgets返回NULL,提供给fgets的字符串/缓冲区是否也保证以 null 终止?

§7.19.7.2 描述中的状态

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

但在返回下:

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

因此,在我的解释中,最后一句话暗示,在任何NULL返回的情况下都没有提供这种保证。我已经要纠正 http://en.cppreference.com 了,因为他们正在使用errnofgets没有义务设置。但我不确定我是否误解了这一点。

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

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

另请注意此特殊情况 (7.21.7.2):

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

相关内容

  • 没有找到相关文章

最新更新