今天我们来说一下strlen和sizeof的区别与用法,相信刚接触这两个的小伙伴们都会有些疑惑与困扰。
strlen
strlen是一个库函数,我们从上次分享的一个查询库函数的网站上看一下对它的解释:
从这段接受中我们可以看出来strlen是专门用来求字符串长度的函数,而它的返回值是size_t类型
(***size_t 是一些C/C++标准在stddef.h中定义的,size_t 类型表示C中任何对象所能达到的最大长度,它是无符号整数。)
既然是函数,那么肯定有包含它的头文件,让我们来看一下:
所以我们在使用strlen时还需要引用它的头文件.
说完了strlen,我们来看一下sizeof;
sizeof
而sizeof则与strlen不同,它并不是函数,而是c语言中的单目操作符
它时用来计算操作数的类型长度,并以字节为单位。
如果光用文字表述,肯定理解的不会那么深刻,而且为什么sizeof就不能用来求字符串呢?那么我们来上代码:
我们明显能够看到这个字符串中含有6个字符,那么我们来运行一下,看看输出结果:
我们看到strlen输出的的确是6.而sizeof输出的却是7,这是为什么呢?
从前面的定义中我们看到sizeof时用来求操作数的占用的内存大小的,可是明明只有6个字符,可是却输出7呢?为了弄清楚,我们来看一下这个字符串在内存中的存储情况:
从这里我们看到原来在我们给arr这里存入abcdef的时候,系统还多放入了一个\0,也就解释了为什么sizeof返回的值是7了.那么为什么系统要在这里放入一个\0呢?
其实关于strlen的设定就是当读取到\0的时候就停止,没有\0的话就一直读取下去,而当我们在定义一个字符串变量的时候,系统就会在尾部放入一个\0,以此来终止strlen。
所以以后千万不要再用混了哦。