这是我在网上找到的一个小型图书馆:
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
)被分配了静态存储。这是否意味着该对象应该保留在内存中直到程序终止?如果是这样,那为什么不能访问字符串?