c ++, wchar [] to std :: cout and comparision
문제
wchar []를 std :: cout에 넣어야합니다 ... 그것은 기본 Wi -Fi API 콜백에서 전달 된 pwlan_connection_notification_data의 일부입니다.
나는 단순히 std :: cout << var; 그러나 그것은 첫 번째 Char의 숫자 주소를 인쇄합니다. 비교 (var == L"some text"
)도 작동하지 않습니다. 디버거는 예상 값을 반환하지만 비교는 0을 반환합니다.이 배열을 표준 문자열 (std :: string)으로 어떻게 변환 할 수 있습니까?
미리 감사드립니다
해결책
var가 a라고 가정합니다 wchar_t *
, var == L"some text"
포인터 비교를합니다. VAR로 가리키는 문자열을 비교하려면 다음과 같은 기능을 사용하십시오. wcscmp
.
다른 팁
일부 솔루션 :
- 대신 std :: wcout에 쓰십시오
- 전환하다:
- std :: codecvt를 사용하는 표준 방식
- Widechartomultibyte를 사용하는 Win32 방식
인쇄를 위해 cout
, 당신은 사용해야합니다 std::wcout
대신에.
비교에 관해서는, 나는 당신이 무슨 뜻인지 잘 모르겠습니다.
- 만약에
var
awchar_t[]
, 당신은 두 개의 포인터를 비교하고 있습니다. 문자열 내용은 동일 할 수 있지만 다른 메모리 위치에 물리적으로 할당되기 때문에 결과는 거짓 일 가능성이 높습니다. 대답은 같은 함수를 사용하는 것입니다strcmp
C 스타일 문자열 (char pointers)을 비교하거나 C ++ 문자열 클래스를 사용합니다. - 그리고
operator==
일반적으로 반환합니다bool
, 정수가 아닙니다. 그래서 돌아올 수 있습니다false
, 그러나 돌아올 수는 없습니다0
... 당신이 이상한 과부하를 직접 만들지 않았다면. (그리고 그것은 경우에만 가능합니다var
사용자 정의 유형입니다.
다음을 사용하십시오
#ifdef UNICODE
#define tcout wcout
#else
#define tcout cout
#endif
제휴하지 않습니다 StackOverflow