gpt4 book ai didi

c++ - 如何返回 std::string.c_str()

转载 作者:太空宇宙 更新时间:2023-11-04 12:42:30 24 4
gpt4 key购买 nike

我有一个返回常量 char 指针的方法。它使用 std::string 并最终返回其 c_str() 字符指针。

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

// Some processing!

return someString.c_str();
}

我收到来自Coverity的报告上面的工具不是很好的用法。我用谷歌搜索并发现返回的 char 指针将在 someString 遇到破坏时立即失效。

鉴于此,如何解决这个问题?如何准确返回一个 char 指针?

返回 std::string 将解决这个问题。但我想知道是否有任何其他方法可以做到这一点。

最佳答案

这段代码中发生的事情是:

const char * returnCharPtr()
{
std::string someString("something");
return someString.c_str();
}
  1. std::string 的实例已创建 - 它是一个具有自动存储持续时间的对象
  2. 返回指向该字符串内存的指针
  3. 对象 someString 被破坏,其内部内存被清理
  4. 此函数的调用者收到悬挂指针(无效指针),这会产生未定义的行为

最好的解决方案是返回一个对象:

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

调用函数时,不要这样做:

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

因为 returnedString 在返回的 std::string 被析构后仍将悬空。而是存储整个 std::string:

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

关于c++ - 如何返回 std::string.c_str(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53509769/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com