2017-12-04 16 views
-2

このプログラムを実行して、最後の行の出力で "f"の代わりに "g"を出力する理由を説明してください。私の意図は、以前の関数が値を返す理由を知ることです。以下のプログラムの出力を説明してください

あなたはによって生成された一時的な値に依存しているためである
#include <iostream> 
#include <string> 

std::string f() { 
    return "f"; 
} 

std::string g() { 
    return "g"; 
} 

int main() { 
    const char * s = f().c_str(); 
    std::cout << "s = " << s << std::endl; 
    std::cout << "g() = " << g() << std::endl; 
    std::cout << "s = " << s << std::endl; 
} 
+3

c_str()の出力は、呼び出しごとに無効になります。どの変数を使用しているかにかかわらず、前の値に頼るべきではありません。 – user2525536

答えて

0

「F()。c_str()」。値のセットは、あなたのchar配列すなわちsの将来の呼び出しに拡張されていない、むしろそれ以来、ゴミが含まれていますぶら下がってしまった。 また、常に 'g'を必ずしも表示しません。

関連する問題