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
相关产品推荐
相关产品推荐

