c语言sizeof和strlen
时间: 2025-06-22 20:26:42 浏览: 19
### C语言中 `sizeof` 与 `strlen` 的区别及用法
#### 1. 基本概念
`sizeof` 是一种操作符,用于计算变量或类型所占的内存空间大小(以字节为单位)[^3]。它在编译时即确定结果,因此不依赖于运行时数据。而 `strlen` 是一个函数,位于 `<string.h>` 头文件中,用于计算字符串的实际长度(不包括结束符 `\0`)[^2]。
#### 2. 使用场景
- **`sizeof` 的使用场景**
`sizeof` 可用于计算任何类型的大小,例如基本数据类型、数组、结构体等。对于字符串数组,`sizeof` 返回的是整个数组的内存大小,包括字符串内容和结束符 `\0` [^4]。
- **`strlen` 的使用场景**
`strlen` 仅适用于以 `\0` 结尾的字符串,用于获取字符串中实际字符的数量,不包括结束符 `\0` [^2]。
#### 3. 示例代码
以下代码展示了 `sizeof` 和 `strlen` 的具体用法:
```c
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "Hello, world!";
// 使用 sizeof 计算数组的总大小
size_t array_size = sizeof(str); // 包括 '\0'
printf("数组的总大小为:%zu 字节\n", array_size);
// 使用 strlen 计算字符串的实际长度
size_t string_length = strlen(str); // 不包括 '\0'
printf("字符串的实际长度为:%zu\n", string_length);
return 0;
}
```
#### 4. 关键区别
- **作用对象**
`sizeof` 作用于变量或类型,而 `strlen` 仅作用于以 `\0` 结尾的字符串 [^1]。
- **返回值含义**
`sizeof` 返回的是内存占用的总字节数,包括结束符 `\0`;`strlen` 返回的是字符串中字符的数量,不包含结束符 `\0` 。
- **执行时机**
`sizeof` 在编译时计算结果,而 `strlen` 需要在运行时计算字符串长度 [^3]。
#### 5. 注意事项
- 如果需要计算动态分配的字符串长度,只能使用 `strlen`,因为 `sizeof` 对指针变量只返回指针本身的大小,而不是其指向的内容大小 [^4]。
- 使用 `strlen` 时必须确保字符串以 `\0` 结尾,否则可能导致未定义行为 [^2]。
---
阅读全文
相关推荐



















