strlen()和sizeof()的区别
- strlen是一个函数,起到计数器的作用。它从内存的某个位置开始扫描,直到碰到第一个字符串结束符 '\0'为止,然后返回计数器值;
- sizeof是关键字,它以字节的形式给出其操作数的存储大小,操作数可以是表达式或括在括号里的类型名,存储大小有操作数类型决定;
具体表现如下:
- sizeof是关键字,strlen是函数。sizeof后如果是类型必须加括号,如果是变量名可以不加括号。
- sizeof的返回结果类型为size_t,在头文件中typedef为unsigned int类型。
- sizeof可以用类型(也可以用函数)作为参数,strlen只能用char*做参数,而且必须是以'\0'结尾的。
在32位机器上:sizeof(int)=4 int g()为函数,sizeof(g())值等于sizeof(int)值4
- 数组名做为sizeof参数时不退化,作为strlen参数时退化为指针。
char a[10]为例,在32位机器上sizeof(a)=1*10=10
char b[20]="0123456789"为例,sizeof(b)=1*20=20; strlen(b) = 10;
换句话说sizeof只关心编译器为其分配的数组空间大小不关心里面存了多少数据,而strlen只关心存储的数据内容,不关心空间的大小和类型。
- sizeof一般在编译期间计算,而strlen则是在运行期间计算的。