一、sizeof与strlen的主要区别点
-
strlen 是函数,sizeof 是运算符。
-
strlen 测量的是字符的实际长度,以'\0' 结束(不包含'\0' )。而sizeof 测量的是分配空间的大小,如果未分配大小,则遇到'\0' 结束(包含'\0' ,也就是strlen测量的长度加1),如果已经分配内存大小,返回的就是分配的内存大小。
例子:
3.char a[5]=”abce”;
sizeof(a);strlen(a);//sizeof输出5,strlen输出4
4.char a[]=”abcde”;
sizeof(a);strlen(a);//sizeof输出6(abcde\0),strlen输出5
5.char *p="addfdf";//32位处理器sizeof(p)输出4(因为指针变量系统分配的内存大小是4),64位时是8。
6.char *p1=malloc(10);//sizeof(p1)==4。但此时的strlen(p1)的结果是0
如果strcpy(p1,"aa");//则strlen(p1)的结果是2
二、数组的不同赋值对应不同的情况
#include <stdio.h>
#include <string.h>
int main(){
char str1[]="am";//这样的赋值系统会在后面添加上'\0'
char str2[]={'a','m','\0'};
char str3[]={'a','m'};//这里没有'\0'的话,就会往后找直到找到'\0'才结束。所以会出现一定的乱码
printf("str1:%s strlen(str1)=%ld sizeof(str1)=%ld\n",str1,strlen(str1),sizeof(str1));
printf("str2:%s strlen(str2)=%ld sizeof(str2)=%ld\n",str2,strlen(str2),sizeof(str2));
printf("str3:%s strlen(str3)=%ld sizeof(str3)=%ld\n",str3,strlen(str3),sizeof(str3));
printf("\n");
return 0;
}
运行结果
三、sizeof('a')的值
这种情况的值为4。因为C中认为常量字符'a'其实是个整型值(ASCII),所以sizeof('a')=4