stelenf和sizeof的区别

stelenf和sizeof的区别_第1张图片

sizeof是一个单目运算符

sizeof可以计算类型在内存中所占的长度,也可以计算字符串等

strlen是个函数 只能计算字符串的长度

sizeof使用不需要添加额外的头文件,而strlen需要添加对应的头文件(字符串相关的库)才能正常使用

此外,虽然sizeofstrlen都可以求字符串长度但是还是有所区别的

先来看sizeof 求a这个数组


#include
int main()
{
  char a[]="abcd"
  printf("%zd",sizeof(a));
  return 0;
}

 stelenf和sizeof的区别_第2张图片

此时运行出来的结果是5

有人说哎,这不是abcd四个字母吗?怎么会出来5呢?

下面我门打开VS2022运行窗口的监视窗口看一下  数组a里面包含了什么

stelenf和sizeof的区别_第3张图片

根据VS的监视窗口得知 a数组除了放abcd最后还有一个\0

为什么呢?

因为字符串是以\0结束的,而C语言中""双引号括起来就表示字符串

所以 用sizeof计算出来数组a的结果是5

下面我们再用strlen来计算一下

如果使用strlen来计算需要多包含一个头文件,因为strlen是一个函数需要对应的头文件

#include
#include
int main()
{
  char a[]="abcd";
  printf("%d",strlen(a));
  return 0;
}

此时用strlen运行的结果是4

现在就有人有疑问了 刚才使用VS监视窗口不是看到了数组a有五个元素吗,这怎么结果是4

那是因为,strlen是专门用来求字符串长度的,所以他自动屏蔽\0

所以strlen自动屏蔽\0就和sizeof计算的结果不一样

注意:

strlen遇到\0的时候就停止计算了,下面我们举个例子:

#include
#include
int main()
{
  char a[]="ab\0cd";
  printf("%d",strlen(a));
  return 0;
}

我在ab后面加了个\0然后cd 看看strlen给我计算出什么结果吧

stelenf和sizeof的区别_第4张图片

这时候的结果是2

那我们由此得知strlen遇到\0自动停止计算,不管是手动输入的还是字符串末尾的,只要遇到\0就停止计算

而用sizeof计算出什么结果呢

#include
int main()
{
  char a[]="ab\0cd";
  printf("%d",sizeof(a));
  return 0;
}

运行一下:

而利用sizeof计算出的则是6,我们后来添加的\0sizeof里面也被计算了一个长度,在加上字符串的结尾标志有一个\0故而是6

总结:sizeof可以计算除字符串外的长度,strlen只能计算字符串长度

           sizeof计算字符串长度的时候结果计算\0

           strlen计算字符串长度的时候结果不计算\0

PS:strlen更像是一个无情的计算机器,不会考虑\0的存在

你可能感兴趣的:(java,算法,linux,c语言)