【C++练习】26.在 C++ 中,不使用 “strcpy“ 函数将一个字符串复制到另一个字符串
目录
- 方法概览
-
- 1. C风格字符数组的复制
-
- 1.1 循环逐个字符复制
- 1.3 使用 "memcpy" 函数
- 2. 使用 C++ "std::string" 类
-
- 2.1 使用赋值运算符 "="
- 2.2 使用拷贝构造函数
- 2.3 使用 "assign()" 方法
- 选择建议
- 注意事项
在 C++ 中,不使用 “strcpy” 函数将一个字符串复制到另一个字符串有多种方法,主要可分为使用 C 风格字符数组 和 C++ “std::string” 类 两大方向。
方法概览
方法类别 | 具体方法 | 关键特点 | 适用场景 |
---|---|---|---|
C风格字符数组 | 循环逐个字符复制 | 最基础,手动管理内存和结束符 | 需要完全控制底层操作或受限环境 |
- | 使用指针操作 | 更接近底层,可能更高效 | 理解指针操作,追求性能 |
- | 使用 “memcpy” | 按字节块复制,效率高 | 复制包括 “’\0’” 在内的整个字符串数据 |
C++ “std::string” | 赋值运算符 “=” | 最简单、安全,自动管理内存 | 现代C++代码的推荐方式 |
- | 拷贝构造函数 | 在创建新对象时直接初始化 | 需要在对象构造时复制字符串 |
- | “assign()” 方法 | 提供更灵活的复制选项(如子串) | 需要更复杂的复制逻辑 |
1. C风格字符数组的复制
C风格的字符串是以空字符 ("’\0’") 结尾的字符数组。复制时需要确保目标数组有足够空间,并手动添加结束符。
1.1 循环逐个字符复制
思路:遍历源字符串的每个字符(直到遇到 “’\0’”),逐个赋值给目标数组,最后在目标数组末尾手动添加 “’\0’”。
#include <iostream>void copyString(const char* src, char* dest) {int i = 0;// 循环复制字符,直到遇到源字符串的结束符while (src[i] != '\0') {dest[i] = src[i];i++;}dest[i] = '\0'; // 手动添加结束符
}int main() {const char* src = "Hello, World!"