関数 SomeFunction() が文字列を返す場合、関数で c_str() を呼び出しているように見える場合があります。返された文字列は、const 文字ポインタに正常に変換されます。ただし、特定のシナリオでは、予期しない動作が発生する可能性があります。
提供されたコードが示すように、SomeFunction() で c_str() を直接呼び出すと、返された文字ポインター (charArray) がガベージ データを参照することになります。文字列を別の文字列 (str) に変換し、それに対して c_str() を呼び出すと、意図した動作が得られます。
なぜこれなのか
SomeFunction().c_str() は、関数のスコープ内にのみ存在する一時変数 (SomeFunction() 内の str 変数) へのポインターを提供します。関数が返された後、その変数は破棄され、ポインタ (charArray) はダングリング ポインタになります。
対照的に、str_copy = SomeFunction() を使用すると、返された文字列のコピーが作成されます。この新しい文字列は関数の外側に存在し、これに対して c_str() を呼び出すと、返されるポインタは有効なデータを指し、正しい変換が保証されます。
以上がstr_copy = SomeFunction(); のときに SomeFunction().c_str() がガベージ データを返すのはなぜですかstr_copy.c_str();正しく動作しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。