用法
sizeof和strlen都是用来求字符串的长度。
区别
-
sizeof是一个单目运算符,不是函数!它的参数可以是数组、指针、数据类型名,函数等等。
而strlen是一个函数,它的参数只能是数据!
证明如下:
代码如下:
#include<stdio.h>
#include<Windows.h>
int main()
{
char sarr[] = “ILOVEC”;
printf("%d\n", sizeof(char));
printf("%d\n", sizeof(int));
printf("%d\n", sizeof(short));
printf("%d\n", sizeof(long));
printf("%d\n", sizeof(long long));
printf("%d\n", sizeof(float));
printf("%d\n", sizeof(double));
printf("%d\n", sizeof(sarr));//sizeof是一个单目操作符。
printf("%d\n", strlen(sarr));//strlen是一个函数。
int num = 10;
int *p = #
printf(“指针变量所占字节数为%d\n”, sizeof(*p));
system(“pause”);
}
-
由运行结果可知,对于同一个数组sarr,用sizeof和strlen求出的字符串大小并不相同,sizeof求出的是7,slrlen求出的为6。
原因是:sizeof求字节数的时候遇到结束字符\0也就是NULL才会停止,而这个\0也包含在其中,所以就是7。
再来看strlen,它是正确的求出字符串的大小,不包含结束字符\0,所以是6。 -
最后一点,sizeof和strlen的返回值(函数的返回值是指函数被调用之后,执行函数体中的代码所得到的结果,这个结果通过return语句返回,执行函数体中,一旦遇到return就立刻返回,不会执行后面的语句,从这个角度看,他还有强制结束函数执行的作用)。
函数 strlen 返回的是一个类型为 size_t (即无符号整型)的值,而 size_t 类型绝不可能是负的。
同时,对 sizeof 而言,因为缓冲区已经用已知字符串进行了初始化,其长度是固定的,所以 sizeof 在编译时计算缓冲区的长度。也正是由于在编译时计算,因此 sizeof 不能用来返回动态分配的内存空间的大小。