6

std :: ostringstreamを使用して数値を文字列(char *)に変換しようとしていますが、機能していないようです。これが私が持っているコードです:

#include <windows.h>
#include <sstream>

int main()
{
    std::ostringstream out;
    out << 1234;

    const char *intString = out.str().c_str();

    MessageBox(NULL, intString, intString, MB_OK|MB_ICONEXCLAMATION);

    return 0;
}

結果のメッセージボックスには、テキストが含まれていません。

これにより、への呼び出しがout.str().c_str()無効な文字列を返していると思いますが、よくわかりません。私はこれまでこのプログラムを縮小してきましたが、まだ問題が発生しているので、恥ずかしいほど単純な間違いを犯したに違いありません。ヘルプをいただければ幸いです。

4

1 に答える 1

12

out.str()std::string by値を返します。これは.c_str()、一時的に呼び出していることを意味します。その結果、intString初期化されるまでに、すでに無効な(破棄された)データを指しています。

結果をキャッシュし、.str()それを処理します。

std::string const& str = out.str();
char const* intString = str.c_str();
于 2012-06-22T22:36:21.877 に答える