0

stringstream の文字列を char ポインタに変換しますが、空の文字列を書き込みます。なぜ失敗するのですか?

std::stringstream ss;
ss << "de12mu";
char* msg = (char*)ss.str().c_str();
std::cout << "msg: " << msg << " " << strlen(msg) << std::endl;
4

1 に答える 1

1

これは、への呼び出しが一時的な文字列を返すss.str()ためです。その後、その一時的な文字列へのポインターを取得すると、ステートメントが完了すると無効になります。

一時文字列が破棄された後にそのポインターを使用することは、未定義の動作です。

c_str関数が を返すことにも注意してくださいconst char*

于 2013-08-02T07:40:47.347 に答える