10.1 strlen和sizeof的区别
前面讲解数据结构时已经对sizeof做了相应的讲解,并且特地强调了sizeof是操作符,而不是函数。需要注意的是,strlen是一个函数。接下来看看它们之间的区别和联系。
sizeof操作符返回的是参数所占的内存数,而strlen函数返回的是参数的字符串长度,不是所占用的内存的大小。需要注意的是,strlen函数的参数是字符串,并且必须以串结束符“\0”结尾。看看下面的代码。
include<stdio.h>
include<string.h>
int main()
{
char str[8]="fdsa";
printf("字符串的长度为:%d\n",strlen(str));
printf("占用内存的大小为:%d字节\n",sizeof(str));
return 0;
}
运行结果:
字符串的长度为:4
占用内存的大小为:8字节
从上面的运行结果可以发现,strlen和sizeof之间的区别在于,通过sizeof操作符得到的是定义的字符数组str占用的内存大小,而通过strlen函数得到的是对其进行初始化的字符长度。在上面的代码中定义的是数组,如果定义的是指针,会怎么样呢?看看下面的代码。
include<stdio.h>
include<string.h>
int main()
{
char*str="Hello";
printf("strlen(str)=%d\n",strlen(str));
printf("sizeof(str)=%d\n",sizeof(str));
printf("sizeof(str)=%d\n",sizeof(str));
return 0;
}
运行结果:
strlen(str)=5
sizeof(str)=4
sizeof(*str)=1
从上面的运行结果发现,str占用内存的大小变为4,这是因为指针在32位计算机中占用4字节,所以其值为4,而接下来的sizeof(str)为1,这是因为str表示字符串首地址的内容,在此就是字符H,占用内存大小为1字节。