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

为何此处strlen结果为25?关于fgets与字符串长度的疑问

问题解答

你的猜测不完全准确,核心原因要从fgets的工作机制说起:

  • fgets的第二个参数指定的是最多读取的字符总数(包含末尾的空终止符'\0')。当你传入26时,它最多只会读取25个有效字符,然后在数组的第26位(索引25)自动添加'\0'来终止字符串。
  • 你输入了26个字母,fgets只能截取前25个存入数组,最后补'\0'。而strlen的计算逻辑是统计从字符串起始位置到第一个'\0'之间的字符数,所以结果自然是25。

需要纠正的是:fgets并不会把数组的第n位设为'\n'——只有当输入中包含换行符(比如你输入完字母按了回车),且换行符在n-1个字符的范围内时,它才会把换行符也读入数组,再补'\0'。但你这里输入的是连续26个字母,没有换行,所以不存在这个情况。

附上你的代码以便参考:

#include <stdio.h>
#include <string.h>

int main(void)
{
    char str[26];

    printf("String: ");
    fgets(str, 26, stdin);

    printf("%lu\n", strlen(str));
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 06:22:07