gpt4 book ai didi

c++ - 从函数返回 'c_str'

转载 作者:可可西里 更新时间:2023-11-01 17:36:02 25 4
gpt4 key购买 nike

这是我在网上找到的一个小型图书馆:

const char* GetHandStateBrief(const PostFlopState* state)
{
static std::ostringstream out;

// ... rest of the function ...

return out.str().c_str()
}

在我的代码中我这样做:

const char *d = GetHandStateBrief(&post);
std::cout<< d << std::endl;

现在,起初 d 包含垃圾。然后我意识到我从函数中获取的 C 字符串在函数返回时被销毁,因为 std::ostringstream 是在堆栈上分配的。所以我补充说:

return strdup( out.str().c_str());

现在我可以从函数中获取我需要的文本。

我有两个问题:

  1. 我理解正确吗?

  2. 我后来注意到 out(std::ostringstream 类型)被分配了静态存储。这是否意味着该对象应该保留在内存中直到程序终止?如果是这样,那么为什么不能访问该字符串?

最佳答案

strdup 在堆上分配字符串的拷贝,稍后您必须手动释放它(我认为使用 free())。如果可以的话,返回 std::string 会好得多。

out 的静态存储没有帮助,因为 .str() 返回一个临时的 std::string,它被销毁了当函数退出时。

关于c++ - 从函数返回 'c_str',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2657178/

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