C字符串的特点
2025年5月13日,周二下午
C字符串(C-style strings)是C语言中表示字符串的传统方式,具有以下核心特性:
-
底层实现
• 字符数组:本质是以空字符'\0'
(ASCII值为0)结尾的字符数组。
• 内存布局:例如"Hello"
实际存储为{'H','e','l','l','o','\0'}
,占用6字节。 -
关键特性
• 不可变性:字符串常量(如"abc"
)内容不可修改,否则行为未定义。
• 手动管理:需显式处理内存分配/释放,易引发缓冲区溢出或内存泄漏。
• 操作依赖库函数:通过<string.h>
提供的函数操作(如strcpy
、strcat
、strlen
)。 -
声明方式
• 数组形式:
char str1[] = "Hello"; // 自动添加'\0'
char str2[6] = {'H','e','l','l','o','\0'};
• 指针形式:
char *str3 = "Hello"; // 指向只读常量区
- 与C++字符串对比
特性 | C字符串 | C++ std::string |
---|---|---|
内存管理 | 手动分配/释放 | 自动管理 |
结尾标识 | 依赖'\0' | 内置长度记录 |
安全性 | 易溢出(如strcpy ) | 边界检查 |
操作便利性 | 需库函数 | 支持运算符(如+ 、= ) |
- 注意事项
• 输入风险:gets()
函数因不检查长度已被弃用,推荐fgets()
。
• 跨平台问题:sizeof(char*)
随系统变化,需用strlen
获取长度。
总结:C字符串高效但风险高,适用于底层开发;现代C++推荐使用std::string
。