C++ 字符串函数实战:strcpy、strcat、strlen、strcmp 详解与示例
什么是字符串?
字符串本质是字符序列。现代 C++ 通常使用 std::string 类对象,它自动处理内存分配、调整大小并提供丰富的成员函数,免去手动缓冲区管理,降低缓冲区溢出风险。
为兼容教学与遗留代码,C++ 仍支持传统 C 风格的以空字符结尾的字符数组。两者各有适用场景:日常编程首选 std::string,遗留 API 或性能极敏感的底层代码可用 C 风格字符串。
声明字符串
- C 风格字符串:以空字符(
\0)结尾的一维char数组。 - std::string:C++ 标准库提供的类,提供丰富的字符串操作接口。
C 风格字符串
示例:
char name[5] = {'J', 'o', 'h', 'n', '\0'};
或更简洁:
char name[] = "John"; // 编译器自动添加终止 '\0'
std::string
使用 std::string 需包含头文件并声明变量:
#include <string> std::string name = "John";
访问字符串值
下面的控制台程序分别打印 C 风格字符串和 std::string 的值。
#include <iostream> #include <string> using namespace std; int main() { char cName[5] = "John"; // C 风格字符串 string cppName = "Guru99"; // std::string cout << "C-style string: " << cName << endl; cout << "std::string: " << cppName << endl; return 0; }
输出:

核心 C 字符串函数
这些函数定义在 cstring 头文件中,操作 C 风格字符串(以空字符结尾的 char 数组)。
strcpy()
将源字符串复制到目标缓冲区。目标缓冲区必须足够大以容纳源字符串。
strcpy(dest, src); // dest 必须有足够空间
strcat()
将源字符串追加到目标字符串末尾。同样,目标缓冲区必须足够大以容纳拼接结果。
strcat(dest, src); // dest 必须有足够空间
strlen()
返回字符串字符数,不包含终止空字符。
size_t len = strlen(str);
strcmp()
按字典序比较两字符串。相等返回 0,第一个字符串较小返回负值,较大返回正值。
int cmp = strcmp(str1, str2);
实战示例
#include <iostream> #include <cstring> using namespace std; int main() { char name1[10] = "Guru99"; char name2[10] = "John"; char name3[20]; // 确保能容纳拼接结果 // 复制 strcpy(name3, name1); cout << "strcpy(name3, name1): " << name3 << endl; // 拼接 strcat(name1, name2); cout << "strcat(name1, name2): " << name1 << endl; // 长度 size_t len = strlen(name1); cout << "strlen(name1): " << len << endl; // 比较 int cmp = strcmp(name1, name3); cout << "strcmp(name1, name3): " << cmp << endl; return 0; }
输出:

核心要点
- 现代 C++ 代码首选
std::string– 更安全、更易用。 - 必须操作原始字符数组时,
cstring函数必不可少。 - 始终确保目标缓冲区足够大以避免溢出。
- 仅在需要长度时用
strlen;std::string对象首选size()。 - 遗留 API 用
strcmp;现代 C++ 中std::string::compare()或重载的operator==语义更清晰。
C语言
- C++ 变量与数据类型全解析:int、double、char、string、bool 详细指南
- C++ 数组完全指南:声明、初始化、多维数组与指针技巧
- C++ do-while 循环详解:语法、实战示例与嵌套循环
- C++ 指针精通:核心概念、代码示例与实战应用
- C++ char 类型完全指南:声明、ASCII 码、输入输出与字符串转换
- C++ 运算符重载实战指南:语法、方法、限制与代码示例
- C++ 函数详解:从声明到调用的实战指南
- C 语言字符串完全指南:声明、输入输出与库函数详解
- 精通 Java 字符串:创建、方法与最佳实践
- 精通 Java 枚举字符串表示:默认行为、toString 重写与进阶模式
- 精通 Java String.indexOf():定位子字符串与实战示例
- Java 中 char 与 String 相互转换:实用示例与最佳实践