sizeof 和 strlen
1. sizeof
- 作用:编译时运算符,用于获取类型或变量所占的字节数(即内存大小)。
- 用法:
sizeof(变量)
或sizeof(类型)
- 适用范围:任何类型(包括数组、基本类型、结构体等)。
- 返回值:返回变量或类型在内存中分配的总字节数。
- 注意:对于数组,
sizeof(数组)
返回整个数组的总字节数;对于指针,sizeof(指针)
返回指针本身的大小(通常为4或8字节,取决于系统位数)。 - 示例:
char str1[] = "hello";
char *str2 = "hello";
printf("%zu\n", sizeof(str1)); // 6,包括 '\0'
printf("%zu\n", sizeof(str2)); // 4 或 8,取决于平台
2. strlen
- 作用:运行时函数,用于计算字符串的实际长度(不包括字符串末尾的
\0
)。 - 用法:
strlen(字符串)
- 适用范围:仅用于以
\0
结尾的字符串。 - 返回值:返回字符串中的字符数(不包括结尾的
\0
)。 - 注意:
strlen
需要遍历字符串直到遇到\0
,所以效率比sizeof
低。 - 示例:
char str1[] = "hello";
char *str2 = "hello";
printf("%zu\n", strlen(str1)); // 5
printf("%zu\n", strlen(str2)); // 5
3. 总结
区别 | sizeof | strlen |
类型 | 编译时运算符 | 运行时库函数 |
返回值 | 类型/变量所占字节数 | 字符串长度(不含'\0') |
适用对象 | 任意类型 | 以'\0'结尾的字符串 |
处理数组 | 返回整个数组的字节数 | 返回字符串实际字符数 |
处理指针 | 返回指针本身的字节数 | 返回指针指向字符串的长度 |