的Apple developer documentation状态:fgets的n参数的含义是否随时间而改变?
为
fgets
安全注意:虽然fgets
功能提供了读取数据的数量有限的能力,就必须使用时要小心。像“更安全”列中的其他功能一样,fgets
始终终止字符串。但是,与该列中的其他函数不同,它需要读取的最大字节数,而不是缓冲区大小。
最后一句对我来说听起来不对。为了比较,这里是what POSIX says:
的
fgets()
功能必须从阅读流字节到阵列指向s
直到n-1
字节被读入,或<newline>
被读出并传送到s
,或最终OF-文件条件遇到。在读入数组的最后一个字节之后立即写入空字节。
这里是an ISO C draft from 2005 says:
的
fgets
函数读取比n
从流中指定的字符数少至多一个指向stream
到阵列通过s
指向。换行符(保留)或文件结束后不会读取其他字符。在读入数组的最后一个字符后立即写入空字符。
FreeBSD的手册页说一样的C标准和POSIX。
这让我觉得苹果文档显然是错误的。最简单的解释是,苹果公司在发表这篇文章时并不知情。但虽然很简单,但这个假设对我来说并不合理。
苹果是否有其他原因可能偏离C标准的措辞?
该文件是错误的。手册页是正确的。 – user3386109
更准确地说:文档不对或者'fgets'实现不符合。我猜这是前者。 –
POSIX似乎很清楚:“直到读取n-1个字节” –