请先看以下代码:
#include<stdio.h>
#include<string.h>
int main()
{
char a[]={'h','e','l','l','o'};
char b[]="hello";
char c[]="he\0llo\0";
printf("strlen(a) = %d sizeof(a) = %d\n",strlen(a),sizeof(a));
printf("strlen(b) = %d sizeof(b) = %d\n",strlen(b),sizeof(b));
printf("strlen(c) = %d sizeof(c) = %d\n",strlen(c),sizeof(c));
return 0;
}
原因分析:
1.
由于strlen对字符进行遍历的时候,只有遇到\0的时候才停下,所有,数组a没有定义\0,所有strlen计算出的是一个系统的随机数7。而sizeof并不是遇\0而停下的,所以sizeof计算的是5;
2.
虽然“hello”没有\0,但系统默认这样定义后面有隐含的“\0”,所以,strlen遇到\0停下,是5,而sizeof则会把\0当成一个字符,然后计算结果是6;
3.
由于strlen遇到\0会自动停止,所以,但遍历到he的时候,就会自动停止,所以是2.而sizeof不会停下,会一直遍历下去,知道没有元素,和第二个结果一样,\0后面隐含一个\0,所以sizeof(c)的结果是5(hello)+3(\0)=8;