为什么输出结果是这样的?

img

img


strlen函数为什么是8而sizeof是5,不应该strlen是到\0那不应该是5吗

strlen 函数返回的是字符串的长度,而 sizeof 返回的是数组的总大小。

在代码中,定义了一个字符数组 d,长度为 5 个字符。但是没有在数组末尾添加空字符 '\0',也就是说,数组并不是一个有效的字符串。

如果希望 strlen 函数能够正确计算字符串的长度,就必须在数组末尾添加空字符。例如:

char d[] = {'a', 'b', 'c', 'd', 'e', '\0'};
printf("%d\n", strlen(d));  // 输出 5

因此在代码中,strlen 函数计算的是数组中所有字符的个数,因此输出的是 8。

而 sizeof 返回的是数组的总大小,包括所有的字符和字符之间的间隔。在代码中,数组的总大小是 5 个字符加上 4 个间隔,即 5*1+4=9 个字节,因此输出的是 5。
望采纳。

strlen函数是计算字符串中字符的个数,而sizeof操作符是计算变量在内存中占用的空间的大小。在你的代码中,d数组定义为一个字符数组,其中包含了5个字符。但是在C语言中,字符串常常以'\0'结尾,而这个字符在内存中占用一个字节,所以sizeof(d)的值和strlen(d)的值不一样。

正确的代码应该是这样的:

#include<stdio.h>
#include<string.h>
int main()
{
char d[] = {'a', 'b', 'c', 'd', 'e', '\0'};
printf("%d\n", strlen(d));
printf("%d\n", sizeof(d));
return 0;
}

这样就可以得到正确的结果:

5
6

问题是你这个数组中没有字符串结束符啊