一、strlen、sizeof的用法介绍
1.strlen:是一个用于求字符串长度的函数,包含在头文件string.h中,用于求字符串长度。
"you are beautiful!"这个字符串长度为18
2.sizeof:是一个操作符,用于求操作数所占字节的大小。
可以看出,用sizeof求出的字符串"you are beautiful!"所占字节大小为19,这里可能就有小伙伴有疑问了,为什么不是18?这是因为在"you are beautiful!"的末尾还有一个隐藏的‘\0’,用于标志这个字符串的结束。
至于为什么打印的结果不同,让我们看看接下来的strlen和sizeof的区别就知道了。
二、strlen和sizeof的区别
区别1:strlen是一个函数,二sizeof是一个操作符;
区别2:strlen是用于求字符串的长度的,操作对象是有要求的,得是字符串,而sizeof用与求操作数所占字节的大小,操作数任意,单位是字节;
区别3:strlen关注内存中是否有\0,\0是作为字符串的结束标志,如果没有\0,就会持续往后找,可能会造成越界。而sizeof不关注内存中的数据。
所以,对于同一个字符串,strlen找到\0就停止了,并计算\0之前的长度,而sizeof计算字符串所占字节的大小,包含了字符'\0'。
三、注意strlen的访问越界
当我们以上例中的形式定义字符串:"you are beautiful!"在这个字符串的末尾是有意隐藏的\0的,但是如果用下图方式定义字符串,则可能出现访问越界,从而打印随机值。
像这里,就打印的是74,而不是4。所以,需要我们手动加上\0,如下图:
若是打印字符串,则可能会打印一些乱码: