これは私がオンラインで見つけた小さな図書館からのものです:
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
はゴミが入っていました。std::ostringstream
次に、関数から取得したC文字列は、スタックに割り当てられているため、関数が戻るときに破棄されることに気付きました。だから私は追加しました:
return strdup( out.str().c_str());
これで、関数から必要なテキストを取得できます。
2つの質問があります:
私はこれを正しく理解していますか?
out
後で、 (タイプのstd::ostringstream
)静的ストレージが割り当てられていることに気付きました。それは、プログラムが終了するまでオブジェクトがメモリにとどまることになっているという意味ではありませんか?もしそうなら、なぜ文字列にアクセスできないのですか?