sizeof与strlen的区别
1)sizeof是关键字,而strlen是函数。sizeof后如果是类型必须加括弧,如果是变量名可以不加括弧。
2)sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型。该类型保证能够容纳实现所建立的最大对象的字节大小。
3)sizeof可以用类型作为操作符,strlen只能用char *做参数,而且必须是以‘\0’结尾的。sizeof还可以以函数作为参数,如 int g(),则sizeof(g())的值就等于sizeof(int)的值,在32位计算机下,该值为4.
4)当数组名做sizeof的参数时不退化,传递给strlen就退化成指针了。以数组char a[10]为例,在32为机器下,sizeof(a)=1*10=10,而传递给strlen就不一样了。
5)大部分编译程序的sizeof都是在编译的时候计算的,所以通过sizeof(x)来定义数组维数。而strlen的计算则是在运行期计算的,用来计算字符串的实际长度,不是类型占内存的大小。
6)当用于计算一个结构类型或变量的sizeof时,返回实际的大小,当用于计算一个静态变量或数组时,返回整个数组所占用的大小,而sizeof不能返回动态数组的大小。
7)sizeof返回定义的数组时,编译器为其分配的数组空间大小不关心里面存了多少数据。strlen只关心存储的数据内容,不关心空间的大小和类型。