使用 +
运算符
- 操作方式:在C++ 中,可以直接使用
+
运算符对两个字符串常量(const char*
)进行拼接,不过其中至少有一个操作数要是 std::string
类型。例如:
#include <iostream>
#include <string>
int main() {
const char* str1 = "Hello";
const char* str2 = " World";
std::string result = str1 + std::string(str2);
std::cout << result << std::endl;
return 0;
}
- 内存管理特点:
std::string
类内部有自己的内存管理机制。当使用 +
运算符进行拼接时,std::string
会根据拼接后的字符串长度重新分配内存。它会自动处理内存的分配和释放,不需要程序员手动干预,减少了内存泄漏的风险。在拼接过程中,会创建一个新的 std::string
对象来存储拼接后的结果,原有的字符串常量(const char*
)所指向的内存不会改变。
使用 strcat
函数
- 操作方式:
strcat
函数来自C标准库 <cstring>
,用于将一个字符串追加到另一个字符串的末尾。它的原型是 char* strcat(char* dest, const char* src);
。使用时,目标字符串(dest
)必须有足够的空间来容纳源字符串(src
)以及拼接后的结果。例如:
#include <iostream>
#include <cstring>
int main() {
char str1[20] = "Hello";
const char* str2 = " World";
std::strcat(str1, str2);
std::cout << str1 << std::endl;
return 0;
}
- 内存管理特点:使用
strcat
函数需要程序员手动确保目标字符串有足够的空间,否则会导致缓冲区溢出错误,这是一种严重的安全漏洞。strcat
函数直接在目标字符串的末尾进行修改,不会创建新的字符串对象。如果目标字符串的内存是静态分配或栈分配的,拼接操作可能会覆盖超出其预定边界的内存,可能导致程序崩溃或未定义行为。并且程序员需要手动管理目标字符串的内存生命周期,相对 std::string
的自动内存管理,使用 strcat
时更容易出现内存泄漏问题。