stringstream::str().c_str() を const char* に割り当てると実行時エラーが発生するのはなぜですか?

Patricia Arquette
リリース: 2024-11-16 04:46:06
オリジナル
812 人が閲覧しました

Why does assigning stringstream::str().c_str() to a const char* result in a runtime error?

変換の混乱: stringstream、string、および char の動作を理解する*

stringstream、string、および char* 変換を中心とした難問これは、stringstream.str().c_str() によって返される文字列の一時的な性質から生じます。この一時文字列は、式の有効期間内にのみ存在し、ステートメントの完了時に削除される可能性があります。

提供されたコード スニペットに示されているように、一時文字列を const char* に割り当てると、実行時エラーが発生します。ポインタは解放されたメモリを参照します。結果として生じるガベージ出力は、このメモリ参照エラーの現れです。

この問題を回避するには、C 文字列表現を取得する前に、一時的な文字列を別の文字列オブジェクトなどのより永続的な場所にコピーします。あるいは、以下に示すように、一時文字列を const 参照にバインドすることで、一時文字列の有効期間を延長することもできます。

{
  const std::string& tmp = stringstream.str();
  const char* cstr = tmp.c_str();
}
ログイン後にコピー

このアプローチにより、文字列は参照のスコープ全体でアクセス可能なままになります。

以上がstringstream::str().c_str() を const char* に割り当てると実行時エラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート