2011-05-03 4 views
4

변수가 LPTSTR이고 에 <<으로 인쇄됩니다. ANSI 시스템 (정확히 어디에서 결정되었는지는 알 수 없음)에서 제대로 작동 했으므로 문자열을 인쇄했습니다. 이제 유니 코드 시스템에서 문자열 대신 16 진수 주소를 얻습니다. 그럼, 왜 LPSTRLPWSTR에서 행위 다르게 (UNICODE가 정의되지 않은 경우 어떤에 LPTSTR가 해결 될 때) 않습니다을 (UNICODE 경우 ... 정의)와 어떻게 후자가 가리키는 문자열을 인쇄합니까?C++ : LPWSTR은 cout의 주소로 인쇄합니다.

답변

9

유니 코드 문자열의 경우 wcout이 필요합니다.

ANSI/ASCII 출력 스트림이 유니 코드 문자를 처리하는 방법을 알지 못하기 때문에 16 진수가 표시 될 수 있습니다.

LPTSTRLPWSTR은 실제로 C Windows API에서 상속 된 C-isms입니다. C++의 경우 std::string 및/또는 std::wstring을 대신 사용하시기 바랍니다.

#ifdef _UNICODE 
#define COUT wcout 
#else 
#define COUT cout 
#endif 
+1

오, 감사 : 당신이 당신의 자신의 매크로를 롤백해야하는 경우

, 당신은 같은 것을 할 것입니다. 그리고 거기에 자동으로 해결하거나 wcout 해결 standart 매크로가 무엇입니까? – lapis

+0

그리고 std :: string 사용에 관해서 - 불행히도, LPTSTR은 WinAPI 함수에서 사용되기 때문에 사용해야합니다. 그리고 비참한 전환을 피하기 위해 저는 그것들을 모두 사용해야합니다. – lapis

+0

C 스타일의 널 종료 문자열을 Windows API로 전달하려는 경우 .c_str() 메서드를 사용할 수 있습니다. – David

관련 문제