stelenf和sizeof的区别

sizeof是一个单目运算符

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

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

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

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

先来看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,我们后来添加的\0sizeof里面也被计算了一个长度,在加上字符串的结尾标志有一个\0故而是6

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

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

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

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

  • 13
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值