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
实际上取决于编译器选项。我可以通过您的代码告诉您正在使用_UNICODE
set 进行编码,这使其成为 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
宏相同。(永远不要自己定义这些,它们属于项目选项)