length 和 sizeof 和strlen区别C++中
时间: 2025-03-28 11:05:53 浏览: 61
### C++ 中 `length`、`sizeof` 和 `strlen` 的区别
#### 1. **`length()`**
`length()` 是标准库中的成员函数,通常用于处理字符串类的对象(如 `std::string`)。它返回的是该字符串对象的实际字符数,不包括终止符 `\0`。
以下是使用 `length()` 的示例代码:
```cpp
#include <iostream>
#include <string>
int main() {
std::string str = "Hello, world!";
std::cout << "字符串的长度:" << str.length() << std::endl;
return 0;
}
```
此方法适用于 `std::string` 类型的字符串[^2]。
---
#### 2. **`sizeof`**
`sizeof` 是一个操作符而非函数,用来计算变量或数据类型在内存中占用的空间大小(单位为字节)。它的行为取决于输入参数:
- 如果是对基本数据类型调用,则返回该类型的固定字节数。
- 如果是对数组调用,则返回整个数组占据的总字节数。
- 如果是对指针调用,则返回指针本身的大小(通常是 4 或 8 字节,具体依赖于平台架构)。
下面是一些例子:
```cpp
#include <iostream>
int main() {
char c = 'a';
int i = 10;
double d = 3.14;
std::cout << "char 大小: " << sizeof(c) << " bytes\n";
std::cout << "int 大小: " << sizeof(i) << " bytes\n";
std::cout << "double 大小: " << sizeof(d) << " bytes\n";
char array[] = "Hello, world!";
std::cout << "数组大小: " << sizeof(array) << " bytes\n"; // 包括 '\0'
return 0;
}
```
需要注意的是,对于动态分配的数组或者指向字符串的指针,`sizeof` 只会给出指针本身所占空间的大小,而不会考虑实际存储的内容[^3]。
---
#### 3. **`strlen`**
`strlen` 函数来自 `<cstring>` 库,专门针对以 null 结尾 (`\0`) 的 C 风格字符串工作。它统计从起始位置到第一个遇到的零结束符之间的有效字符数量,因此忽略掉可能存在的多余空白区域。
这里有一个简单的演示程序:
```cpp
#include <iostream>
#include <cstring>
int main(){
const char* s = "example string.";
size_t len = strlen(s);
std::cout << "The length of the string is: " << len << "\n";
return 0;
}
```
值得注意的一点是,如果传入给 `strlen` 的并非合法的 C 字符串(即缺少结尾标记),则可能导致未定义的行为发生[^1]。
---
### 总结对比表
| 特性 | `length()` | `sizeof` | `strlen` |
|-----------------|-------------------------------|------------------------------------|--------------------------------|
| 返回值 | 实际字符数目 | 占用内存大小 | 不含终结符的有效字符计数值 |
| 数据结构支持 | 主要面向 `std::string` | 支持任意类型 | 专供 C-style strings |
| 是否包含`\0` | 否 | 是 | 否 |
---
阅读全文
相关推荐


















