MST

星途 面试题库

面试题:C++中字符串常量拼接方式及原理

在C++中,描述至少两种字符串常量的拼接操作方式,并解释每种方式在内存管理上的特点。例如,使用`+`运算符和`strcat`函数进行拼接有何不同?
30.5万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试

使用 + 运算符

  1. 操作方式:在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;
}
  1. 内存管理特点std::string 类内部有自己的内存管理机制。当使用 + 运算符进行拼接时,std::string 会根据拼接后的字符串长度重新分配内存。它会自动处理内存的分配和释放,不需要程序员手动干预,减少了内存泄漏的风险。在拼接过程中,会创建一个新的 std::string 对象来存储拼接后的结果,原有的字符串常量(const char*)所指向的内存不会改变。

使用 strcat 函数

  1. 操作方式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;
}
  1. 内存管理特点:使用 strcat 函数需要程序员手动确保目标字符串有足够的空间,否则会导致缓冲区溢出错误,这是一种严重的安全漏洞。strcat 函数直接在目标字符串的末尾进行修改,不会创建新的字符串对象。如果目标字符串的内存是静态分配或栈分配的,拼接操作可能会覆盖超出其预定边界的内存,可能导致程序崩溃或未定义行为。并且程序员需要手动管理目标字符串的内存生命周期,相对 std::string 的自动内存管理,使用 strcat 时更容易出现内存泄漏问题。