stringstream、string、および char* 変換の混乱
この記事では、stringstream によって返される文字列に const char* を割り当てる問題について説明します。 .str().c_str().
問題説明
stringstream.str() は、式の最後に破棄される一時文字列オブジェクトを構築します。この一時文字列を const char* に割り当てると、ポインタは削除された文字列を参照するため、ガベージ出力が発生します。
次に例を示します。
stringstream ss("this is a string\n"); const char* cstr = ss.str().c_str();
上記のコードでは、式の後にあります。終了すると、stringstream.str() によって作成された一時文字列が削除され、cstr が無効なメモリを指すようになります。 location.
解決策
この問題を修正するには、一時文字列を const char* に変換する前に別の文字列オブジェクトにコピーする必要があります。これは、次のアプローチを使用して実現できます。
string tmp = stringstream.str(); const char* cstr = tmp.c_str();
ボーナス ポイントの説明
次の変更されたコードは、文字列を正しく出力します。
cout << cstr << ss.str().c_str() << cstr2;
この変更は次の理由で機能します:
以上が`stringstream.str().c_str()` を `const char*` に代入するとガベージ出力が発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。