【发布时间】:2016-03-08 22:03:06
【问题描述】:
在阅读 C99 草案 ISO/IEC 9899:TC2 WG14/N1124 时,我偶然发现了一些令我担心的陈述:
如果fgets 返回NULL,给fgets 的字符串/缓冲区是否也保证为空终止?
§7.19.7.2 说明中的状态
一个 在读入数组的最后一个字符之后立即写入空字符。
但正在退货中:
如果在操作过程中发生读取错误,则数组内容为 不确定并返回一个空指针。
因此,在我的解释中,最后一条语句暗示在任何NULL-returning 情况下都没有给出这种保证。
我已经要纠正http://en.cppreference.com,因为他们使用的是errno,fgets 没有义务设置。但我不确定我是否误解了这一点。
【问题讨论】:
-
我知道在返回 NULL 的情况下无法验证缓冲区是否以 null 结尾。如果有任何疑问,不要指望有那个方便的尾随零。 ;-)
-
既然数组中没有读入字符,那后面怎么写
null字符呢? -
“我已经要改正了……”为什么,什么?
-
"如果在操作过程中发生读取错误,则数组内容不确定,返回空指针。"对我来说听起来很清楚。缓冲区的内容是 indeterminate 周期。
-
也许我应该把这个问题作为一个维基问题来问?!我希望有人可以发布带有更多参考的答案,以防止这种可能的误解。