sizeof是一个单目运算符
sizeof可以计算类型在内存中所占的长度,也可以计算字符串等
而strlen是个函数 只能计算字符串的长度
sizeof使用不需要添加额外的头文件,而strlen需要添加对应的头文件<string.h>(字符串相关的库)才能正常使用
此外,虽然sizeof和strlen都可以求字符串长度但是还是有所区别的
先来看sizeof 求a这个数组
#include<stdio.h>
int main()
{
char a[]="abcd"
printf("%zd",sizeof(a));
return 0;
}
?
此时运行出来的结果是5
有人说哎,这不是abcd四个字母吗?怎么会出来5呢?
下面我门打开VS2022运行窗口的监视窗口看一下? 数组a里面包含了什么
根据VS的监视窗口得知 a数组除了放abcd最后还有一个\0
为什么呢?
因为字符串是以\0结束的,而C语言中""双引号括起来就表示字符串
所以 用sizeof计算出来数组a的结果是5
下面我们再用strlen来计算一下
如果使用strlen来计算需要多包含一个头文件<string.h>,因为strlen是一个函数需要对应的头文件
#include<stdio.h>
#include<string.h>
int main()
{
char a[]="abcd";
printf("%d",strlen(a));
return 0;
}
此时用strlen运行的结果是4
现在就有人有疑问了 刚才使用VS监视窗口不是看到了数组a有五个元素吗,这怎么结果是4
那是因为,strlen是专门用来求字符串长度的,所以他自动屏蔽\0
所以strlen自动屏蔽\0就和sizeof计算的结果不一样
注意:
strlen遇到\0的时候就停止计算了,下面我们举个例子:
#include<stdio.h>
#include<string.h>
int main()
{
char a[]="ab\0cd";
printf("%d",strlen(a));
return 0;
}
我在ab后面加了个\0然后cd 看看strlen给我计算出什么结果吧
这时候的结果是2
那我们由此得知strlen遇到\0自动停止计算,不管是手动输入的还是字符串末尾的,只要遇到\0就停止计算
而用sizeof计算出什么结果呢
#include<stdio.h>
int main()
{
char a[]="ab\0cd";
printf("%d",sizeof(a));
return 0;
}
运行一下:
而利用sizeof计算出的则是6,我们后来添加的\0在sizeof里面也被计算了一个长度,在加上字符串的结尾标志有一个\0故而是6
总结:sizeof可以计算除字符串外的长度,strlen只能计算字符串长度
? ? ? ? ? ?sizeof计算字符串长度的时候结果计算\0
? ? ? ? ? ?strlen计算字符串长度的时候结果不计算\0
PS:strlen更像是一个无情的计算机器,不会考虑\0的存在