2009-10-26 2 views
1

WCHAR []을 std :: cout에 넣어야합니다 ... 기본 Wifi API 콜백에서 전달 된 PWLAN_CONNECTION_NOTIFICATION_DATA의 일부입니다.C++, WCHAR [] to std :: cout 및 비교

나는 간단히 시도했다 :: cout < < var; 첫 번째 문자의 숫자 주소를 출력합니다. 비교 (var == L"some text")도 작동하지 않습니다. 디버거에서 예상 값을 반환하지만 비교 결과는 0입니다.이 배열을 표준 문자열 (std :: string)로 변환하려면 어떻게해야합니까? 사전에

감사

+0

비교' "텍스트"== 이미 실패 할 수 있습니다 "텍스트를"'사용 : 당신은 ='와 C에서 문자열을 비교할 수 있습니다 ='. C++을 사용하십시오 :'std :: wstring (L "text") == std :: wstring (L "text")' – MSalters

답변

3

가정 VAR은 wchar_t *이다 var == L"some text" 포인터 비교한다. 이러한 wcscmp를로서의 기능을 사용하여 VAR 가리키는 문자열을 비교하기 위해서 ..

12

일부 솔루션 :

  • 쓰기가 성병 :: wcout 대신
  • 변환 :
    • 표준 방법, 표준을 사용하여 : codecvt
    • WideCharToMultibyte를 사용하는 Win32 방식
8

cout으로 인쇄하려면 대신 std::wcout을 사용해야합니다.

비교를 위해, 나는 당신이 무슨 뜻인지 정말로 모르겠다.

  • varwchar_t[] 인 경우 두 개의 포인터를 비교합니다. 문자열 결과는 같을 수 있지만 물리적으로 서로 다른 메모리 위치에 할당되기 때문에 결과는 거짓 일 가능성이 높습니다. 대답은 C 스타일 문자열 (char 포인터)을 비교하거나 C++ 문자열 클래스를 사용하는 strcmp과 같은 함수를 사용하는 것입니다.
  • operator==은 일반적으로 정수가 아닌 bool을 반환합니다. 따라서 false을 반환 할 수는 있지만 0을 반환 할 수 없습니다. 이상한 오버로드를 직접 작성하지 않은 한. var 사용자 정의 형식 인 경우 (그리고 그 경우에만 가능하다.
+1

I assu 나 wcscmp를 의미하니? C++은 실제로 stringlike를 취하기 위해'strcmp()'를 오버로드해야합니다. 그러나 불행히도 표준 C 라이브러리의 수학 부분 만이 그 대우를 받았습니다. – MSalters

+0

참. 나는 "strcmp 계열의 함수"를 의미했습니다. 그것이 내가 "같은 기능"이라고 말한 이유입니다. – jalf

3

이유`일반`의 char * 다음과 같은

#ifdef UNICODE 
#define tcout wcout 
#else 
#define tcout cout 
#endif