戻り値における c_str() の動作を理解する
文字列を返す関数を呼び出すとき、c_str() を呼び出すと仮定するかもしれません。 ) 戻り値に対して、文字列の文字を確実に指す const char* が生成されます。ただし、特定のシナリオでは、この操作により予期しない動作が発生する可能性があります。
次のコードを考えてみましょう:
string str = SomeFunction(); const char* strConverted = str.c_str(); // Stores the value correctly. const char* charArray = SomeFunction().c_str(); // Stores garbage value. static string SomeFunction() { string str; // Perform string manipulation. return str; }
この問題は、c_str() が SomeFunction() を呼び出すために発生します。c_str( ) は一時オブジェクトを参照し、関数が戻ると無効になります。これにより、charArray が無効なメモリ位置を指すことになり、値がガベージされます。
これを修正するには、最初のステートメントで示したように、返された文字列を新しい文字列変数に格納します。これにより、有効期間が延長された文字列の個別のコピーが作成され、このコピーに対して c_str() を呼び出すと、望ましい結果が得られます。
要約すると、c_str() は関数によって返された文字列の変換に使用できますが、注意が必要です。臨時職員を雇用する場合には、このことをお勧めします。戻り値をローカル文字列変数に格納すると、c_str().
によって返される const char* ポインターの有効性が保証されます。以上が関数の返された文字列に対して `c_str()` を呼び出すことは常に安全ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。