C语言sizeof与strlen的区别与使用

前言:本文章主要用于个人复习,追求简洁,感谢大家的参考、交流和搬运,后续可能会继续修改和完善。

因为是个人复习,会有部分压缩和省略。

一、sizeof

        1.sizeof用来计算类型或变量所占空间的大小,单位为字节。计算时包括 '\0'。('\0'算作字符串的结束标志,在使用strlen计算长度时不被计算进去)

        2.两种特殊情况:sizeof(数组名) 和 &数组名,这两种情况下,数组名代表的是整个数组,其他情况下数组名代表的只是数组首元素地址。

        3.sizeof是一个(单目)操作符,不是库函数,这个操作符返回的结果是size_t(unsigned int),即无符号整型。

        4.sizeof(),括号中如果放变量,括号可以省略,如果是类型,不可以省略。(函数后的括号不能省略)

        5.C语言标准规定:sizeof(long) >= sizeof(int)

  

6.sizeof括号中的表达式不参与计算

因为sizeof括号中的表达式是不参与运算的! 因为sizeof是在编译期间进行处理的,源文件在变成可执行文件过程中,经过预处理,编译,汇编,链接,sizeof在编译中就判断了c的大小,给出值为4,并且表达式不参与运算,而printf函数是在运行的时候再执行的,所以直接打印出4,和下面s变量的值0。

7.计算数组元素个数时,sizeof陷阱

我们在使用数组和函数时,有时需要用到数组的大小,这时,如果我们是在函数中使用传过来的数组首元素地址来计算整个数组的大小,就容易出现错误。

 用sizeof求数组大小时要注意,当数组被当作参数传递过去时,传过去的是数组的首元素的地址,因为是地址,所以用指针来接收,所以函数里面用sizeof求的都是指针的大小(值为4或8),不是数组的大小,所以求数组元素个数时,会出现指针大小除指针大小的情况,所以在函数中计算得出数组元素个数的值为1

二、字符串操作函数strlen

        1.strlen计算字符串长度,不包括'\0'。

       

        2.strlen比较大小可以用if(strlen("abcde")>strlen("abcdefeo")  )。但不要用两个字符串的strlen相减是否大于0来判断

 这个代码中arr1的长度明显小于arr2,直接比较时的结果是正确的。

 但是用两长度相减就容易出现bug,之所以会出现bug是因为strlen的返回值类型为size_t(无符号整型),即使相减小于0,得到的数仍为正整数。

 

 如果非要减,可以使用强制类型转换来实现

3.数组未以'\0'结尾时使用strlen出现的问题

因为strlen的结束是'\0',即遇到'\0'就结束。那么当一个数组没有以'\0'结尾时,strlen会继续寻找

'\0',因为是在未知数据中,所以这时strlen计算出的结果会是一个随机值。

  • 44
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 36
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

列宁格勒的街头

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值