MST

星途 面试题库

面试题:C语言字符串拼接中的内存管理

假设你有两个字符串str1和str2,要求将str2拼接到str1之后。请编写代码实现该功能,并详细说明在处理过程中如何妥善管理内存,避免内存泄漏和缓冲区溢出等问题。
41.0万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试

在Python中,字符串是不可变对象,拼接操作会返回一个新的字符串,因此不存在内存泄漏和缓冲区溢出的问题,代码如下:

str1 = "hello"
str2 = "world"
result = str1 + str2
print(result)

在C++中,使用std::string类来处理字符串拼接,std::string类会自动管理内存,有效避免内存泄漏和缓冲区溢出问题,示例代码如下:

#include <iostream>
#include <string>

int main() {
    std::string str1 = "hello";
    std::string str2 = "world";
    str1.append(str2);
    std::cout << str1 << std::endl;
    return 0;
}

在Java中,使用StringBuilder类(线程不安全)或StringBuffer类(线程安全)来拼接字符串,它们会自动管理内存,防止内存泄漏和缓冲区溢出,以StringBuilder为例:

public class StringConcatenation {
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder("hello");
        sb.append("world");
        String result = sb.toString();
        System.out.println(result);
    }
}

在这几种语言中,Python由于字符串的不可变特性,拼接操作直接返回新字符串;C++通过std::string类的append方法来拼接,该类内部会自动管理内存;Java则使用StringBuilderStringBuffer类来高效拼接字符串并管理内存,都能有效避免内存泄漏和缓冲区溢出问题。