两者区别
sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型。该类型保证能容纳实现所建立的最大对象的字节大小。sizeof是运算符(C++ 关键字),strlen是函数。sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以”\0”结尾的sizeof计算的是变量的大小,而strlen计算的是字符串的长度,前者不受字符’\0’影响,后者以’\0’作为长度判定依据测试代码
int main(){char *str1 = "abcdef";char str2[] = "abcdef";char str3[8] = {'a', 'b', 'c'};char str4[] = "ab\0cd";printf("sizeof(str1)=%d\n",sizeof(str1));printf("strlen(str1)=%d\n",strlen(str1));printf("sizeof(str2)=%d\n",sizeof(str2));printf("strlen(str2)=%d\n",strlen(str2));printf("sizeof(str3)=%d\n",sizeof(str3));printf("strlen(str3)=%d\n",strlen(str3));printf("sizeof(str4)=%d\n",sizeof(str4));printf("strlen(str4)=%d\n",strlen(str4));return 0;}
执行结果如下:
sizeof(str1) = 4; strlen(str1) = 6;sizeof(str2) = 7; strlen(str2) = 6;sizeof(str3) = 8; strlen(str3) = 3;sizeof(str4) = 6; strlen(str4) = 2;
结果解释:
1、 str1是字符指针变量,sizeof获得的是该指针所占的地址空间,32位操作系统对应4字节,所以结果是4;
strlen返回的是该字符串的长度,遇到’\0’结束,’\0’本身不计算在内,故结果是6。
2、 str2是字符数组,没有规定大小,所以大小由字符串常量”abcdef”确定,sizeof获得该数组所占内存空间大小,包括字符串结尾的’\0’,所以结果为7;
strlen同理,则是6。
3、 str3也是字符数组,但数组的大小已经确定为8,故sizeof得到的结果是8;
strlen统计’\0’之前所有字符的个数,即为3;
4、 str4是常量字符数组,和str2类似,区别在于中间忽然出现个’\0’,所以sizeof得到字符总数即6;
strlen计算至’\0’结束,因此返回2;
注意:这里的’\0’是一个字符,别看成为两个