sizeof和strlen()都可以计算变量所占的内存空间大小,但是两者有很大的区别,所以要学会两者的用法,少犯错误。
1、sizeof是关键字,strlen()是函数;
2、sizeof的变量可以是任何类型,而string()只能计算字符串的长度;
如:sizeof(int)=4;sizeof(short)=2;charstr[]=”hello”;strlen(str)=5;
3、当计算字符串数组的长度时,sizeof的结果是包含”\0”在内的内存大小或者是系统分配给该数组的内存大小,而strlen()是计算字符串的实际大小。
int a[10]={1,2,3};sizeof(a)=40;
char c1[]=”hello”;sizeof(c1)=6;strlen(c1)=5;
/*注意sizeof在字符串常量和字符串数组的区别
当字符串指针作为参数时,sizeof计算的是指针所占内存,大小为4个字节,当是字符数组时,计算的是字符串在内存中所占字节大小,包含“\0” */
char *string="hello";
printf("%d %d\n",sizeof(string),strlen(string)); //4 5
printf("%d\n",sizeof(*string)); //1
char str[]="hello";
printf("%d %d\n",sizeof(str),strlen(str)); //6 5
4、关于数组的sizeof要更加注意,数组作为参数进行传递时,会退化为指针。
void fun1(char a1[3])
{
int i=sizeof(a1);
}
void fun2(char a2[10])
{
int j=sizeof(a2);
}
上面的程序中i和j的大小均为4,这是因为a1和a2作为函数参数不再是数组类型,而是蜕变成指针,相当于char *a1,char *a2,指针大小始终为4。