2011-05-03 254 views
4

我有一個變量LPTSTR,我打印到std::cout<<。在ANSI系統中(不知道確切的位置)它工作正常,它會打印字符串。現在在一個Unicode系統中,我得到一個十六進制地址而不是字符串。那麼,爲什麼LPSTRLPWSTR(到LPTSTR是,如果沒有定義UNICODE解決)行爲方式(...如果UNICODE定義)以及如何打印由後者指向的字符串?C++:LPWSTR打印爲cout中的地址

回答

9

對於需要的Unicode字符串wcout

您可能會看到十六進制,因爲ANSI/ASCII輸出流不知道如何處理Unicode字符。

LPTSTRLPWSTR實際上是繼承自C Windows API日的C-isms。對於C++,我強烈建議您使用std::string和/或std::wstring

如果您需要推出自己的宏,你會想是這樣的:

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

哦,謝謝。是否有一個自動解析爲cout或wcout的非標準宏? – lapis 2011-05-03 17:44:42

+0

關於使用std :: string - 不幸的是,LPTSTR被用在WinAPI函數中,所以我必須使用它們。爲了避免不必要的轉換,我必須一直使用它們。 – lapis 2011-05-03 17:48:48

+0

如果希望將C樣式的以空字符結尾的字符串傳遞給Windows API,則可以使用.c_str()方法。 – David 2011-05-03 17:51:27