0

wstringstream に問題があります。私がこれをしているとき

    std::wstringstream ss;
    wchar_t* str = NULL;
    ss << str;

アプリケーションがエラーでクラッシュする

Unhandled exception at 0x53e347af (msvcr100d.dll) in stringstr.exe: 0xC0000005: Access violation reading location 0x00000000.

たとえば、これはうまくいきます:

ss << NULL;
wchar_t* str = L"smth";
ss << &str;

常に str に値があるとは限りません。NULL の場合もあり、NULL の場合はストリームに 0 を入れたいと思います。修正方法は?

4

2 に答える 2

4

wchar_tnull の場合は、nullポインターを出力しないでください。

( str ? ss << str : ss << 0 );

これは機能しないことに注意してください。

ss << ( str ? str : 0 )

暗黙的な条件付き演算子の戻り値の型は両方の式に共通の型であるため、それでも nullwchar_tポインターが返されます。

于 2012-06-03T19:17:38.410 に答える
2

stringstream に出力する前に確認してください (既に提案されているように)

if (str == NULL) {
    ss << 0;
} else {
    ss << str;
}
于 2012-06-03T19:21:06.257 に答える