You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 14:24:02