2012-06-03 3 views
0

У меня проблема с wstringstream. Когда я делаю этоC++ wstringstream << NULL

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; 

Не всегда имеет значение ул, это может быть NULL иногда и когда это NULL Я бы хотел поставить 0 в поток. Как это исправить?

ответ

4

Если это нуль, не выводится нулевой wchar_t указателя:

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

Обратите внимание, что это не будет работать:

ss << (str ? str : 0) 

, так как неявный тип условного возврата оператора является распространенным типом для обоих его выражений, поэтому он все равно вернет нулевой указатель wchar_t.

+0

Ahhhhh, я пытался 'сс << (ул 0:? Ул);' и он не работает – user1112008

+1

@ user1112008 : Неявный условный оператор return type является общим типом для обоих выражений, поэтому в вашем случае он все равно возвращает указатель null wchar_t. –

+0

еще один вопрос, что, если мы используем шаблоны? 'template std :: string realToString (type real)' и мы проверяем, не является ли 'real' не NULL? – user1112008

2

проверить перед выходом на stringstream (как уже было предложено)

if (str == NULL) { 
    ss << 0; 
} else { 
    ss << str; 
} 
Смежные вопросы