如何打印LPCTSTR数组
例
LPCTSTR pszValueNames[] = { L"partnerID", L"partnerSubID", L"transactionID" };
for (int i = 0; i < (sizeof(pszValueNames) / sizeof(LPCWSTR)); i++)
{
cout << (*pszValueNames[i]) << endl;
}
Run Code Online (Sandbox Code Playgroud)
上面给出了一些不是真正的lpctstr值的数字.当我使用wchar_t*和所有其他基本类型时,它会吐出好的值.
您获得打印地址的原因是std::cout可以使用std::string,这是char基于.An LPCWSTR是一个宽字符串指针类型,并且cout不知道如何将"宽字符串"显示为"字符串".
你应该std::wcout用来处理一个宽字符串.
std::wcout << pszValueNames[i] << std::endl;
此外,LPCTSTR即使您的程序可能有效,您的使用也是不正确的.如果您知道自己使用的是宽字符串,请指定LPCWSTR您将使用的任何位置LPCTSTR.原因是它LPCTSTR不一定是宽字符串指针类型,具体取决于您使用的构建类型(MBCS或Unicode).
简而言之,你的字符串指针声明是一个不同字符串类型的大杂烩,其中一些函数可以工作(如果LPCTSTR是一个非宽字符指针),而其他字符串处理函数将不起作用.
基本上,如果你打算使用LPCTSTR或LPTSTR,然后所有的代码来处理字符串或字符串指针类型应该使用"打造中性"类型,即使用LPCTSTR,TCHAR,LPTSTR,_T(),等这些类型将无缝改变,如果你从去MBCS构建为Unicode构建(反之亦然).
如果在另一方面,如果你知道生成将永远只能是Unicode,然后LPCWSTR和LPWSTR应该在你的程序中使用.相反,如果您知道并且可以保证构建只是MBCS,那么在程序中使用LPCSTR和LPSTR.
最好的办法是LPCTSTR在整个应用程序中使用构建中性类型(等等),或者将所有这些类型更改为宽字符串类型(LPCWSTR等等).MBCS构建现在变得非常罕见,因此不妨开始使用宽字符串类型进行开发,并且char当您与依赖char基于字符串的其他函数接口时,仅在应用程序中使用字符串类型.