【发布时间】:2011-02-09 01:46:56
【问题描述】:
这是我在网上找到的一个小型图书馆:
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类型)被分配了静态存储。这是否意味着该对象应该保留在内存中直到程序终止?如果是这样,那为什么不能访问字符串呢?
【问题讨论】:
标签: c++ c c-strings c-str static-allocation