sizeof和strlen的区别
最近复习了c语言,在字符串,数组中经常用到的sizeof和strlen有什么区别呢?可能在实际运用中会混在一起,所以这篇文章把它们的用法总结的清清楚楚。
举下面几个例子
第一个例子:
char *s="0123456789";
sizeof(s)的结果位4,s是指向字符串常量的字符指针
sizeof(*s)的结果位1,*s是第一个字符
第二个例子:
int s[100]="0123456789";
sizeof(s)的结果为400,s表示在内存中的大小,100*4=400。
strlen(s)错误,因为strlen的参数只能是char *,且必须是以"\0"结尾的。
第三个例子:
char s[100]="0123456789";
sizeof(s)的结果为100,s表示在内存中预分配的大小,100*1=100
strlen(s)的结果为10,它的内部实现使用一个循环计算字符串的长度,直到"\0"为止。
总结:
(1)sizeof操作符的结果类型是size_t,它在头文件中的typedef为unsigned int 类型保证能容纳显示所建立的最大对象的字节大小。
(2)sizeof是运算符,strlen是函数。
(3)sizeof可以用类型做参数,strlen只能用char *做参数,且必须是以"\0"结尾的。
(4)数组做sizeof的参数不退化,传递给strlen就退化为指针。
(5)sizeof后如果是类型必须加括号,如果是变量名可以不加括号。
(6)当使用了一个结构类型或变量时,sizeof返回实际的大小。当使用一静态的空间数组sizeof返回全部数组的尺寸。sizeof操作符不能返回被动态分配的数组或外部的数组的尺寸。
(7)sizeof操作符不能用于函数类型、不完全类型或位字段。如位置存储大小的数组类型、未知内容的结构或联合类型、void类型等。