Skip to content

Latest commit

 

History

History
18 lines (16 loc) · 1.57 KB

sizeof和strlen.md

File metadata and controls

18 lines (16 loc) · 1.57 KB

对一个字符串进行sizeof和strlen的区别

对于一个字符串而言,可能有三种形式,一种是字符数组的形式,一种是字符指针形式,一种是string类型;

  1. 对于string类型 内存占用和具体的库对string类的实现方式有关,4字节、12、28字节都有可能
  2. 对于字符数组 首先如果是数组已经指定了大小,那么sizeof数组出来的结果肯定等于指定的数组的大小; 对于strlen,对于每一个字符串,其后面对自动加0,strlen遇到字符'\0'或者数字0('\0'的ASCII码就是0)就会停止计数,若数组的长度不足以保存'\0',那么strlen的结果将是不确定的; 如果数组没有指定大小,由字符串自己来确实; 对于sizeof,其会计算真实的字符串会有多少长度,即他会计算字符串本身长度+'\0'的长度,即使字符串本身内部有'\0'也会在字符串末尾加'\0'计数; 对于strlen,其会遇到'\0'就结束,如果字符串内部有'\0'就会提前结束
  3. 对于字符指针 sizeof对于任何类型的指针都是32位机器对应4字节,64位机器对应8字节 strlen的计算方式和字符数组计算方式一样

还有一个特例就是字符数组作为函数参数时,实际是一个指针,所以对函数参数是数组的字符取sizeof时要注意

具体的例子结合上面的原理和下面这篇文章绝对会掌握和明白!