一時文字列で std::string.c_str() を呼び出す
C では、一時オブジェクトは、それが作成された完全な表現。指定されたコードの行 const char* cStr = getString().c_str(); getString() の戻り値から一時的な std::string オブジェクトを作成します。ただし、この一時ファイルは、cStr ポインターが使用できる前に破棄されます。
これを修正するには、一時ファイルを名前付き変数に格納するか、const lvalue-reference または rvalue-reference にバインドします。例:
<code class="cpp">std::string s = getString(); // Extended lifetime const char* cStr1 = s.c_str(); std::cout << cStr1 << std::endl; // Safe const std::string& s2 = getString(); // Const lvalue-reference const char* cStr2 = s2.c_str(); std::cout << cStr2 << std::endl; // Safe</code>
または、一時ファイルが破棄される前にポインタを使用することもできます:
<code class="cpp">std::cout << getString().c_str() << std::endl; // Temporary used immediately</code>
以上が記事の内容に適した質問ベースのタイトルをいくつか示します。 **直接的かつ集中的:** * **一時文字列に対して `std::string.c_str()` を呼び出すと未定義の動作が発生するのはなぜですか?** * **の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。