int main()
{
char a[] = "abcdefg";
char *pstr = "abcdefg";
char b[]={'a','b','c','d','e','f','g'};
printf("sizeof(a)=%d,strlen(a)=%d
",sizeof(a),strlen(a));
printf("sizeof(pstr)=%d,strlen(pstr)=%d
",sizeof(pstr),strlen(pstr));
printf("sizeof(b)=%d,strlen(b)=%d
",sizeof(b),strlen(b));
}
打印结构如下所示
sizeof(a)=8,strlen(a)=7
sizeof(pstr)=4,strlen(pstr)=7
sizeof(b)=7,strlen(b)=19
结果说明:
char a[]中的元素包括"abcdefg"以及一个' ',pstr也是这样,因为他们都是一个字符串。
所以sizeof(a)=8;
strlen(a)=strlen(pstr)=7是因为strlen计算的是字符串中除结尾标志' '外的所有字符;
而strlen(b)=19是因为b不是一个正常“字符串”,字符串必须明确以' '结尾,而cha b[]只是一个字符数组,当用strlen计算b的长度时,是将b当作一个字符串来进行计算长度,也就是说要遇到' '才认为这个“字符串”结束;而b中未有定义元素' ',所以strlen会沿着b结尾的内存地址一直计数下去,直到遇到' '。所以用strlen(b),结果是不可预知的。
理解了上一条,sizeof(b)=7也不难理解,b是一个字符数组,里面只有7个元素,再次强调,b中没有' '。
最后一条sizeof(pstr)=4,这个相信计算机的童鞋都能理解吧,32位机器上指针的大小=32bit=4byte。所以结果为4.