ホームページ >バックエンド開発 >C++ >str_copy = SomeFunction(); のときに SomeFunction().c_str() がガベージ データを返すのはなぜですかstr_copy.c_str();正しく動作しますか?

str_copy = SomeFunction(); のときに SomeFunction().c_str() がガベージ データを返すのはなぜですかstr_copy.c_str();正しく動作しますか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-18 22:46:02973ブラウズ

Why Does SomeFunction().c_str() Return Garbage Data While str_copy = SomeFunction(); str_copy.c_str(); Works Correctly?

関数によって返される文字列に対する c_str() の関数を理解する

関数 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。