strlen是一个在C/C++语言中广泛使用的字符串处理函数,其全称是“string length”的缩写,用于计算字符串的长度,即字符串中字符的个数(不包括字符串末尾的空字符‘\0’)。strlen函数从传入的字符串(实际上是字符指针)的起始位置开始,逐个字符进行遍历,直到遇到第一个空字符‘\0’为止。这个过程中,strlen会计算并返回遍历的字符个数,但不包括空字符‘\0’本身。
strlen函数的返回值是size_t类型,这是一个无符号整数类型,能够表示足够大的对象大小
sizeof 是 C 和 C++ 语言中的一个操作符,用于获取对象或类型在内存中的大小(以字节为单位)。它可以在编译时计算,因为它仅仅是根据类型或变量所占的内存空间进行计算的,而不需要运行时信息。sizeof 可以应用于各种数据类型,包括基本数据类型(如 int、float、char 等)、结构体(struct)、联合体(union)、数组、指针等
- 编译时计算:
sizeof
是在编译时计算的,因此它不能用于计算动态分配的内存(如通过malloc
或new
分配的内存)的大小。 - 数组与指针的区别:在函数参数中,当数组作为参数传递时,它会被退化为指向数组首元素的指针。因此,在函数内部,使用
sizeof
操作符作用于数组参数会得到指针的大小,而不是数组本身的大小。 - 结构体和联合体:
sizeof
可以用于计算结构体或联合体的大小,这取决于其成员的大小以及可能的填充(padding)字节。
本质不同:strlen是一个函数,通过遍历字符串来计算长度;而sizeof是一个操作符,用于在编译时计算变量或类型所占的内存大小。
参数类型:strlen的参数必须是字符指针(char*或const char*),且指向的字符串必须以‘\0’结尾;sizeof的参数可以是任何类型或变量,甚至是表达式。
计算时机:strlen的计算是在运行时进行的,因为它需要遍历字符串;而sizeof的计算是在编译时完成的,因为它只需要知道类型或变量在内存中的大小。