2012-06-03 6 views
0

wstringstream에 문제가 있습니다.C++ wstringstream << NULL

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

을하지 항상 str을 가지고 값, 가끔 NULL이 될 수 있고 :이 좋은 작품 예를 들어 오류

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

으로이

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

응용 프로그램 충돌을하고있을 때 그것은 0입니다 스트림에 넣어 싶습니다. 그것을 고치는 방법?

답변

4

이 널 (null)의 경우, 출력하지 널 wchar_t 포인터 수행 암시 적 조건 연산자의 반환 형식은 일반적인 유형이기 때문에

ss << (str ? str : 0) 

:

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

이 작동하지 않습니다를 두 표현식에 모두 적용되므로 null wchar_t 포인터를 반환합니다. (이미 제안)이 이제 stringstream로 출력하기 전에

+0

아 ~~~ !!, 내가하려고했던'SS << (STR 0 :!? STR),'하고 – user1112008

+1

를 작동하지 않는 @ user1112008 : 암시 적 조건 연산자 반환 형식은 양쪽 식에 공통적 인 형식이므로, 귀하의 경우에는 여전히 null'wchar_t' 포인터를 반환합니다. –

+0

질문이 하나 더 있으면 템플릿을 사용하는 경우 어떻게해야합니까? 'template std :: string realToString (type real)'그리고'real'이 NULL이 아닌지 검사 할 것인가? – user1112008

2

확인

if (str == NULL) { 
    ss << 0; 
} else { 
    ss << str; 
}