【发布时间】:2020-08-21 23:08:01
【问题描述】:
所以,我在StackOverflow看到了下面的答案
fgets 在 C99 或当前标准 C11 中实际上并未被弃用。但是该教程的作者是对的,fgets 在遇到 NUL 时不会停止,并且没有机制来报告它对此类字符的读取。
fgets函数从stream指向的流中最多将n指定的字符数少1个字符读入s指向的数组中。在换行符(保留)之后或文件结尾之后不会读取其他字符。
“fgets遇到NUL不会停止是什么意思?请用简单的代码sn-p解释一下。
【问题讨论】:
-
给我们看帖子。
-
@anastaciu 已编辑。
-
那句话有什么不清楚的地方?假设输入包含以下字节:
41 41 41 41 00 4a 4b 4c 4d 10 4e 4f你认为fgets读取了多少字节? -
我猜困惑是
NULL与 C 中的\0字符不同 -
fgets()读取一行,直到找到'\n',因此如果数据包含 NUL 字符,它将终止字符串并打印 NUL 和\0之间的所有子字符串“没有任何线索就不会出现。BUT fgets 旨在读取文本,并且 nul 字符会出乎意料。因此,说 fgets 因这个原因被弃用就像说strcpy是不安全的,因为如果缓冲区包含字符串终止符,它不会复制缓冲区中的数据。