这是我在网上找到的一个小型库:
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());
现在我可以从函数中获取所需的文本。
我有两个问题:
我的理解是正确的吗?
我后来注意到
out
(类型为std::ostringstream
)是使用静态存储分配的。这不意味着该对象应该一直保留在内存中直到程序终止吗?如果是这样,那么为什么不能访问该字符串?