strlen是C/C++的标准库函数,其功能是计算字符串长度。sizeof是单目运算符,其功能是计算运算对象(变量或数据类型)所占字节数。两者完全不同。
两者的主要区别如下:
1)sizeof是关键字,是单目运算符,有优先级。strlen是函数名,在使用时必须include相关的头文件string.h。
2)使用sizeof可以求各类变量或者数据类型所占用的字节数。而strlen只能求字符串的长度,要求的参数类型只能是char *,且其中保存的字符串必须是以串结束标记 '\0' 作为结尾。
3)当运算对象为字符数组时,例如,char str[100]="CHINA" *p=str;,sizeof( str )得到的是数组str的大小,结果为100;而strlen( str )返回的是数组str中保存的字符串的长度,结果为5。sizeof( p )得到的是指针变量p所占用的内存大小,结果为4;而strlen( p )返回的是指针p所指向的字符串的长度,结果为5。
4)strlen是在程序运行期间计算出来的。多数情况下,sizeof是在编译时计算完成的,但有时也需要在运行时通过计算才能得到。例如求动态数组占用的字节数。
5)当使用sizeof计算一个结构类型或变量占用的字节数时,返回的是实际占用内存的大小。当使用sizeof计算一个静态变量或数组时,可得到整个数组所占的大小。使用sizeof求动态数组的大小与编译器相关,有的编译器是不支持这一功能的。
运行下列程序。
#include
#include
int main()
{ inta, x, n;
charstr[100]="CHINA", *p=str;
x= sizeof a; //用sizeof求变量所占字节数,可以不用括号
a= sizeof(int); //用sizeof求类型所占字节数,必须用括号
printf("sizeofx = %d\n", x );
printf("sizeofint = %d\n", a );
printf("sizeofstr = %d\n", sizeof str ); // 求字符数组大小
printf("strlenstr = %d\n", strlen(str) ); //求字符串长度
printf("sizeofp = %d\n", sizeof p ); // 求指针变量p的大小
printf("strlenp = %d\n", strlen(p) ); // 求指针p所指字符串长度
printf("Enter n:");
scanf("%d", &n);
int b[n];
// 根据变量n的值,说明一个长度为n的动态数组
printf("sizeofb = %d\n", sizeof(b) );
// 求动态数组大小
return0;
}
运行程序,输入100,运行结果如下。
sizeof x = 4
sizeof int =4
sizeof str =100
strlen str =5
sizeof p = 4
strlen p = 5
Enter n:100
sizeof b = 400
《横扫offer---程序员招聘真题详解700题》,开点工作室著,清华大学出版社出版,天猫、京东等各大网上书店及实体书店均有发售。