2017-02-12 4 views
-1

私は次のコードを有する:第あろうが、二つの異なるbehaveiors intまたはstring.c_strを返す()関数からCPP

const char* justReturn() 
{ 
    std::string s = "rstring"; 
    return s.c_str(); 
} 

int justReturnI() 
{ 
    int x = 5; 
    return x; 
} 


int main() 
{ 

    const char* result = justReturn(); 
    int result2 = justReturnI(); 
    std::cout << result <<std::endl; 
    std::cout << result2; 
    std::cin.get(); 
    return(0); 
} 

第1機能eillの出力は奇妙な文字列であることを私に '5'を与える​​。

なぜ変わった文字が印刷されるのですか?私はスコープの終わりの直後に死んだ文字列を返しませんでした。私は新しいconst charを返しました。

+0

しかし、ポインタはデッドストリングを指しています。 –

+1

[未定義の動作?](http://coliru.stacked-crooked.com/a/c6e6c3496e689c92) –

+0

http://en.cppreference.com/w/cpp/string/basic_string/c_str - *戻り値:へのポインタ基礎となる文字ストレージ。* – chris

答えて

1

これは、文字列std::string s = "rstring";が関数のスコープに対してローカルなので、破棄されたオブジェクトへのポインタを返すため、dangling-referenceが作成されるためです。だからあなたは予期せぬ結果を得るのです。

関連する問題