stringstream、string、char* 変換のナビゲート
C で文字列を扱う場合、プログラマは stringstream と string の間で変換するときに混乱に遭遇することがよくあります。 、およびchar*。この記事では、これらの変換の複雑さを掘り下げ、誤解を解明し、実用的な解決策を提供します。
stringstream.str().c_str() の存続期間を理解する
核心問題の主な点は、stringstream.str().c_str() によって返される文字列の有効期間を理解することにあります。この一時文字列オブジェクトは式の最後で破棄され、そこから取得したポインタ (const char* cstr2 など) が無効になります。
混乱の解決
この問題を解決するには、stringstream.str().c_str() を const char* に直接割り当てることを避けてください。代わりに、別の文字列オブジェクトに一時文字列のコピーを作成し、そこから C 文字列を取得します:
const std::string tmp = stringstream.str(); const char* cstr = tmp.c_str();
または、式内で使用して一時文字列の有効期間を制限します:
use_c_str( stringstream.str().c_str() );
効率と明確さのために、一時オブジェクトを const 参照にバインドします:
{ const std::string& tmp = stringstream.str(); const char* cstr = tmp.c_str(); }
以上がC で stringstream、string、char* の間で安全に変換する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。