最近在找工作面试和笔试中遇到了这个问题,当遇到这个问题时,第一反应是:都是求长度,然后是什么?不会知道了,如果给我一个编译器,可能试试就能试出来区别。但是面试时,你如果知道的很清楚,就能答上,如果不清楚就会支支吾吾。为了能够清除的区分sizeof和strlen,做以下总结:
- sizeof是关键字,strlen是一个函数。
注:如果使用strlen时一定要记得包含<string.h>头文件。
- strlen是一个求字符串的函数,如果一个数组中存的是字符类型的变量,可以使用此函数求字符数组的长度,如果一个数组中存的是其他类型的变量,就不能够使用此函数。
sizeof的实质是求所数组或者字符串占内存的大小,当变量类型为char时,所占内存字节数与变量个数相等。
strlen的实质是求字符串或者字符数组中的字符的个数。
以下是在LeetCode和牛客网的编译器中测试的一些例子。
char a[14]=”abcd”;
strlen(a)=4;
sizeof(a)=14;
char a[]=”abcd”;
strlen(a)=4;
sizeof(a)=5;//计算内存时算上了\0
char *a=”abcdefghig”;
strlen(a)=10;
sizeof(a)=8;//sizeof求得时指针所占内存的大小,64位机器当然占用8个字节内存咯。
/*******/
Int a[4]={1,2,3};
strlen(a)=1; //计算长度错误,但是编译通过了。
sizeof(a)=16; //数组长度为4,每个int型占用4个字节,共占用16个字节。