代码改变世界

字符串和字符数组长度

2013-09-06 15:19  居安  阅读(1599)  评论(0编辑  收藏  举报

int main()

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