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

C语言strlen()返回值异常:输入hello得到长度6的问题求解

问题根因

该现象不是strlen()的运行异常,完全是fgets()函数的默认行为导致的:

  • fgets()从标准输入读取内容时,会把输入结束时按下的**换行符\n**作为有效字符存入目标字符串,之后才会在末尾自动补\0作为字符串结束标记。
  • 你输入hello后按回车,最终写入string数组的内容为h、e、l、l、o、\n、\0,strlen()统计的是从首字符到\0之前的所有字符长度,自然得到6的结果。

验证与修复方案

你可以遍历打印每个字符的ASCII值确认:

for(int i = 0; i < strlen(string); i++) {
    printf("%d ", string[i]);
}

运行后会看到最后一个可统计字符的ASCII值为10,对应换行符\n。

如果要去除多余换行符拿到正确长度,可在读入后增加如下处理:

string[strcspn(string, "\n")] = '\0';

这行代码会定位到字符串中第一个\n的位置,将其替换为\0,此时再调用strlen()就会返回预期的5。

内容的提问来源于stack exchange,提问作者Kain

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 19:27:05