首页 >后端开发 >C++ >如何从 std::string 安全地返回常量字符指针?

如何从 std::string 安全地返回常量字符指针?

Barbara Streisand
Barbara Streisand原创
2024-12-28 02:12:11355浏览

How to Safely Return a Constant Char Pointer from a std::string?

从 std::string 获取常量字符指针的正确返回方法

在编程中,Coverity 等错误检测工具会标记潜在问题。其中一个问题是从 std::string 返回常量 char 指针时出现问题,这可能会导致未定义的行为。

考虑以下代码:

const char * returnCharPtr()
{
    std::string someString;

    // Some processing!

    return someString.c_str();
}

此问题方法是,一旦 std::string someString 被销毁,返回的 char 指针就变得无效,指向已释放的内存。这个问题可以通过返回 std::string 本身而不是它的 c_str() 来解决:

std::string returnString()
{
    std::string someString("something");
    return someString;
}

但是,从返回的 std::string 访问 char 指针时要小心。例如,以下内容是不正确的:

const char *returnedString = returnString().c_str();

当返回的 std::string 被销毁时, returnedString 保持悬空状态,并且尝试访问 returnedString.c_str() 将导致未定义的行为。相反,存储整个 std::string:

std::string returnedString = returnString();
// ... use returnedString.c_str() later ...

这种方法可确保只要存储的 std::string 存在,char 指针就保持有效。

以上是如何从 std::string 安全地返回常量字符指针?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn