C语言中的sizeof与strlen

前言

sizeof和strlen函数基本在所有公司的嵌入式软件笔试题中都会出现。反正我是遇到了好几次。虽然很多人都会用,但是又很经常会出错,这是因为很多人没有好好的去总结。好了,废话不多说,进入今天的主题。

sizeof

sizeof()用来判断数据类型长度或数组长度。

数据类型

上面的参数直接给类型,返回的结果是操作系统对对应的类型分配的字节大小。简单说就是char类型的变量会分配1个字节,这些是根据具体的操作系统而言的,不同操作系统,不同编译器,分配的字节大小会有一点差异。

普通变量

上面使用普通变量和使用类型作为参数类似,都是根据变量的类型来判断具体的字节大小。

数值

基本上我们可以把上面三种情况当成同一类,其实都是根据类型来判断大小。

数组

直接使用数组名就是计算整个数组占用的存储空间,然后我们具体说一下一维数组的后三个。第一个a[1]和普通变量时一样,所以也是根据类型来计算大小,所以int为4;第二个&a代表一个地址(它是数组名a的地址),而地址的大小都是4,无论什么类型变量的地址都是4(当然这个跟操作系统有关啦);第三个&a[0]也是地址,所以,你懂得!

字符串

上面的字符串我只是指字符数组,字符串当然还可以是指针,因为我把指针独立出来,所以这里指字符数组。

首先,当我们指定了字符数组的大小时,则sizeof()的计算结果就是字符数组的大小。它的计算方式和其他类型的数组的方式一样。

然后就是不指定大小时,它是根据字符数量来自动分配数组大小的。要注意的是:当我们没有在字符串的末尾加'\0',会自动添加'\0'。所以上面的字符串长度才会是4.。

指针

因为指针存放的是地址,所以无论是哪种类型的指针使用sizeof()返回都是4,地址的大小就是4 。当我们使用' * ' 运算符去获取指针的值时,然后使用sizeof()时就和sizeof(数值)是一样的了。

额,好像发现没办法获取字符串的长度了。

strlen

ok,上面我们不是发现指针没办法使用sizeof来获取字符串的长度吗?主角要上场了!

strlen: 计算给定字符串的长度,不包括'\0'在内。

原型:unsigned int strlen(char *s);

参数只能是char* 类型,如果传int* 会有问题。

strlen遇到'\0'就结束,并且不包括'\0'字符。

总结

好了,两者的对比就交给大家自己去思考了,两者的区别还是比较明显的。

希望大家可以温习温习,反正我目前经历过的嵌入式软件笔试中基本都会有这类型的题目的。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180612G1YJZR00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

同媒体快讯

扫码关注云+社区

领取腾讯云代金券