strlen 和 sizeof 区别
区别
- strlen 是一个库函数,而 sizeof 是一个运算符
- sizeof 计算的是变量或者类型所占用的内存字节数,而 strlen 计算的是字符串中字符的个数
- sizeof 可以用于任何类型的数据,而 strlen 只能计算以 '\0' 结尾的字符串
代码示例
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int main()
{
char msg[100] = "hello world";
printf("strlen(msg):%zu sizeof(mgs):%lu\n", strlen(msg), sizeof(msg));
char msg_1[] = "hello world";
printf("strlen(msg_1):%zu sizeof(msg_1):%lu\n", strlen(msg_1), sizeof(msg_1));
return 0;
}
- 结果
strlen(msg):11 sizeof(mgs):100
strlen(msg_1):11 sizeof(msg_1):12
- 解释
- msg[100], 开辟一个100字节的内存大小空间,存储 11 个字节大小的字符串,所以字符串长度为 11,strlen 结果是 11, sizeof 结果是 100
- msg1[], 开辟一个空间存储字符串,具体大小由编译器计算,所以实际开辟 12 个字节大小的空间,存放 11 个字节长度的字符串,故 strlen 结果是 11,sizeof 结果是 12. 相差的这个一字节,存储的就是 C 风格字符串表示字符串结尾的标识符, '\0'