1.sizeof与strlen的定义
1.1sizeof
sizeof是C/C++中的一个长度运算符,优先级为2
作用: 是返回一个对象或者类型在内存中所占用的字节数。
1.2 strlen
strlen是C语言中的库函数,所在头文件为#include <string.h>
原型: unsigned int strlen(char *str);其中str为指定的字符串
功能: 统计字符串str中字符的个数(不包括 ‘\0’)
返回值: 返回字符个数
2.区别
1.strlen 测量的是字符的实际长度,以’\0’ 结束,但不包括结束字符(\0或null)。而sizeof 测量的是字符的分配大小。
例:
char str[20] = "123456789";
int a = strlen(str); /*a = 9*/
int b = sizeof(str);/*b = 20*/
运算结果:
a的长度为9
b的长度为20
上面结果为a = 9,这是因为strlen计算的是字符串的实际长度,以第一个’\0’为结束符;b = 20,这是因为sizeof计算的是分配的数组str[20]所占的空间大小,不受里面存储内容的影响。
2.sizeof是编译期就计算完成的,strlen是运行期计算的。
例:
char arr[] = "hello";
/*用sizeof求长度*/
printf("arr的sizeof长度=%d\n", sizeof(arr));
printf("arr的strlen长度=%d\n", strlen(arr));
运算结果:
arr的sizeof长度=6
arr的strlen长度=5
sizeof代码运行结果为 6(因为它包括结束字符 null)。另外,因为缓冲区已经用已知字符串进行了初始化,其长度是固定的,所以 sizeof 在编译时计算缓冲区的长度。也正是由于在编译时计算,因此 sizeof 不能用来返回动态分配的内存空间的大小。