c++ - 如何在没有 free() 或 delete 的情况下返回 char*?

标签 c++

我正在尝试返回 char*,但我不希望函数用户删除 free() 内存。

我有以下内容:

namespace name_space 
{
    char* function(unsigned int i);
}

char* name_space::function(unsigned int i)
{
    char buffer[MESSAGE];
    strerror_s(buffer,errno);

    switch(i_exception)
    {
        case MESSAGE_RETURN:            return "No free or delete needed";
        case ERRNO_ERROR:               return buffer;
        default:                        return "UNKNOWN";
    }
}

当我返回“MESSAGE_RETURN”字符串时,不需要 free() 或 delete。但是如何在不使用 new 或 malloc 的情况下返回缓冲区?

最佳答案


前提:

您的函数 name_space::function 不应返回缓冲区

buffer 是一个local (auto) 变量,当函数返回时它会被销毁。如果调用函数试图访问该内存,您可能会收到一个seg-fault 或无论如何一个 UB。


回答:

如果你需要返回一个字符串,简单的 std::string 怎么样?动态内存将由类自动处理。

例如:

#include <string>

std::string name_space::function(unsigned int i) {
    char buffer[MESSAGE];
    strerror_s(buffer, MESSAGE, errno);

    switch (i_exception) {
        case MESSAGE_RETURN:            return "No free or delete needed";
        case ERRNO_ERROR:               return std::string(buffer);
        default:                        return "UNKNOWN";
    }
}

关于c++ - 如何在没有 free() 或 delete 的情况下返回 char*?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45232357/

相关文章:

c++ - 使用 ADO 命令对象实现大容量/批量插入

c++ - 使用谷歌原型(prototype)缓冲区发送/接收数据

c++ - 自制迭代器的常量正确性

c++ - FFmpeg c++ H264解码错误

c++ - 如何将名称读入指针数组并输出?

c++ - 在家工作的条件编译

c++ - Qt全局快捷方式扩展劫持快捷方式

c++ - 为什么我的 C++ 程序在这一点之后不工作

Android NDK STL c++_shared w/LIBCXX_FORCE_REBUILD 导致 std::stringstream NOP

c++ - 组合模板参数形成函数签名时无效的 void 参数