为何此处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
相关产品推荐
相关产品推荐

