1.首先明白strlen和sizeof的区别
:
sizeof():主要负责计算数组的长度。
strlen():主要负责计算字符串的长度。
2.有关不同定义下的求字符数组所占内存的大小(以sizeof为例)
char str[]={‘b’,'i','t'};//所占三个字节(因为前面[]内没有规定具体个数的多少,所以没有自动补/0)
char str[3]={'b','i',''t};//所占三个字节(按照理论在前面标识了具体数字之后应该自动去补/0,但是由于原本数组内容已到达上限(三个字节),故数组长度为三个字节。
char str[4]="bit";//所占四个字节(按照规定,前面标识数字之后要自动补0)。
char str[]="bit"(或者{“bit”}--定义二维数组时相对常用),此时被称为以字符串类型定义字符数组,则此时需要自动补0,故其所占内存大小为4个字节;
char *str={"bit"}或者“bit”时,此时用sizeof求其大小时,所求的并不是数组内容所占字节大小,而是指针的大小(地址值的大小),在32位操作系统中为4个字节,64位操作系统中为8个字节。而在这种情况下,用strlen求其所占内存数大小时,则所求的是其具体内容所占的内存的大小。