2016-08-25 9 views
0

私は関数を持っています。Analyze_、それにいくつかの情報を含むstd :: stringを返します。私は でもLPCSTRフォームにしたいと思います。 私はこのようなc_str()を使用すると、それは私の情報を作品とl店舗:変換に間違いがあります。std :: string - > LPCSTR

std::string s = myClassInstance.Analyze_(); 
LPCSTR l  = s.c_str(); 

しかし、私は次のような、それは短い書くとき、私は「Yさんのシリーズを取得:

LPCSTR l = myClassInstance.Analyze_().c_str(); 

Analyze_()の前にc_str()を呼び出していますか?私はそれが機能ではなく、文字列ではないので、不可能でなければならないと思います。

私は、このような直接そうように、文字列を生成し、それだけを返すようにstringstreamからそれを変換するなど、他のソリューション、試してみました:

std::stringstream ss; 
ss << "Bla blub...\n"; 
return ss.str().c_str(); 

をしかし、私はそこに同じ問題を抱えています。 なぜこれが起こっていますか?

答えて

2

c_str()std::stringの内部バッファにconst char*を返します。 LPCSTR l = myClassInstance.Analyze_().c_str();のようにメソッド呼び出しを呼び出すと、std::string(戻り値Analyze())が作成され、その文字列の内部バッファへのポインタが返されます。次に、文字列が破棄され、邪魔にならないようにするために、未定義のビヘイビアが残っています。そのバッファへのポインタを使用する場合は、std::stringを保存してください。

+0

TLでしたがDR:文字列オブジェクトがもう存在しない場合はc_str() - ptrを使用しないでください。 – Hayt

関連する問題