Cla*_*dgz 4 c++ string mfc lpcstr
我找到了一个比较两个LPCSTR执行以下操作的实现:
void check(LPCSTR lpText)
{
if(lpText == input)
{
// do stuff
}
}
Run Code Online (Sandbox Code Playgroud)
问题是它有效.我换成了......
if(lstrcmpi(lpText, input) == 0)
{
// do stuff
}
Run Code Online (Sandbox Code Playgroud)
虽然我觉得现在更安全.
我只是想知道其他实现是否只是检查地址或大小,它是如何工作的?
我检查了一个LPCSTR的内存地址,它是0x0633522c,另一个是0x028a91a4.
这震撼了我的整个基础.
可能input在你的第一个例子中是一个CString实例,并且有一个重载operator==采用原始的C风格的字符串指针和a CString(const CString&),它做了正确的字符串比较.
实际上,在cstringt.hATL头文件中,您可以找到:
Run Code Online (Sandbox Code Playgroud)friend bool operator==( _In_z_ PCXSTR psz1, _In_ const CStringT& str2) throw() { return( str2.Compare( psz1 ) == 0 ); }