我用下面的测试代码得到了字符数组的大小:
int main()
{
unsigned char str[] = "abcde";
for(int j = 0; j <= 6; j++) {
printf("str[%u]=%c; %i\n", j, *(str+j), *(str+j));
}
printf("sizeof(str)=%lu\nstrlen(str)=%lu\n", sizeof(str), strlen(str));
return 0;
}
结果是6,正如预期的那样,可以在下面的屏幕输出中看到:
str[0]=a; 97
str[1]=b; 98
str[2]=c; 99
str[3]=d; 100
str[4]=e; 101
str[5]=; 0
str[6]=; 0
sizeof(str)=6 //here it is!
strlen(str)=5
但是,如果我在它的声明中显式地包含字符串维度(5),就像这样:
unsigned char str[5] = "abcde";
现在sizeof的结果是5,而不是预期的6,从函数输出可以看出:
str[0]=a; 97
str[1]=b; 98
str[2]=c; 99
str[3]=d; 100
str[4]=e; 101
str[5]=; 0
str[6]; 8
sizeof(str)=5 // why 5 and not 6???
strlen(str)=5
我的问题是:造成这种不同结果的原因是什么? 注意,终止字符被正确地放置在最后一个字符串字符之后,从上面的例子中可以看出. 谢谢你的关注.