为什么fgets指定读取长度为5时仅读取到4个有效字符?
fgets读取长度小于指定参数的原因解析
首先明确fgets函数的原生设计规则:
- 第二个参数指定的是目标缓冲区可容纳的总字节数,而非最多读取的有效字符数
- 为了保证读取结果是合法的以
\0结尾的C字符串,fgets最多只会读取参数值-1个实际输入的字符,最后一个字节会自动填充字符串结束符\0
针对你给出的代码场景:
传入fgets的第二个参数为5,因此最多读取4个有效输入字符,后续输入内容会被留在输入缓冲区等待后续读取操作。你输入的hello world前4个字符为h/e/l/l,缓冲区最后一位自动补\0,因此最终输出结果只有hell。
补充说明:如果输入行的总长度(含末尾换行符)小于
参数值-1,fgets会把换行符也一并读入缓冲区,再补\0。
内容的提问来源于stack exchange,提问作者RAT
相关产品推荐
相关产品推荐

