c++ - std::string::c_str() 如何返回不会导致内存泄漏或未定义的 c 字符串内容的 c 字符串?

标签 c++ string memory cstring

我正在为家庭作业编写一个类似于 std::string 的字符串类,但我无法弄清楚如何返回一个不会导致内存泄漏并保证保持不变的 c 字符串,直到它不再使用。我目前有:

const char* string::c_str()
{
    char c[_size+1];
    strncpy(c,_data,_size);
    c[_size]='\0';
    return c;
}

但是内容在调用后不久就被覆盖了。如果我进行动态分配,我要么会发生内存泄漏,要么在任何时候给定字符串中只能存在一个 c 字符串。我怎样才能避免这种情况?

最佳答案

但是 c_str 指向的字符串只有在 std::string 被下一次修改(或销毁)之前才是明确定义的。

实现此目的的一种方法可能是简单地返回指向内部缓冲区的指针(假设它以 null 结尾)。请记住,符合标准的 c_str 必须在 O(1) 时间内运行;因此不允许复制。

关于c++ - std::string::c_str() 如何返回不会导致内存泄漏或未定义的 c 字符串内容的 c 字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11336351/

相关文章:

java - 使用内连接合并 2 个大型 csv 文件

c - 用gets()读char*报 "Core Dumped"错误(C语言)

audio - flac 编解码器,2 个文件,持续时间相同,但内存大小不同

c++ - 遍历一个字符串并将其与另一个字符串进行比较,以检查第一个字符串中的字符是否进入第二个字符串

c++ - Qt - 获取系统信息

java - 分割字符串时避免数组索引越界异常

c - sprintf 转换说明符的使用

java - 字符串变量连接

c++ - 如何将 UTF-8 编码的 std::string 转换为 UTF-16 std::string

python - "Deterministic"伪随机数生成