2011-05-03 256 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