LPCTSTR是一个指向数组的指针const wchar_t。 strPermission指向数组的第一个字符。 L"0"是一个字符串文字,它是一个 的数组const wchar_t,它衰减为 的一个指针const wchar_t。但是指针不相等,它们指向不同的数组。这就是我们发明 C++ 的原因。请使用它。
std::wstring strPermission = Method();
return (strPermission == L"0"); //works like magic!
或者,如果Method要退回您必须保留的东西,至少要这样做
std::unique_ptr<wchar_t[]> strPermission = Method();
return (std::wcscmp(strPermission.get(), L"0")==0);
//wcscmp is for comparing strings, but returns 0 if they're equal.
另外,您确定它strPemission指向一个包含零字符后跟空字符的数组吗?如果不是,并且您没有使用wstring,那么您还必须检查它是否指向数组
if (strPermission)
//do stuff
else
//its a NULL pointer.
克里斯提醒我指出,类型LPCTSTR实际上取决于编译器选项。我可以通过您的代码告诉您正在使用_UNICODEset 进行编码,这使其成为 a const wchar_t*,但是如果您希望能够使用其他选项进行编译(我想不出这样做的充分理由),您应该使用_tcscmp来比较, 有文字 as_T("0")并且它们将是 . 的数组TCAHR。对于字符串,您必须在某处添加 typedef:
#ifdef _UNICODE
typedef std::string std::tstring
//you'll probably have to add more t helper functions here
#else
typedef std::string std::wstring
//you'll probably have to add more t helper functions here
#endif
如果您想确定您的代码始终 _UNICODE是(这就是我所做的),请显式调用MethodW()而不是Method(). (也有相应的MethodA(),但没有太多理由调用它)。
还有一个UNICODE宏,但它应该始终与_UNICODE宏相同。(永远不要自己定义这些,它们属于项目选项)