我发现了一个实现,它比较了两个执行以下操作的LPCSTR:
void check(LPCSTR lpText)
{
if(lpText == input)
{
// do stuff
}
}
问题是它有效。我把它换成了...
if(lstrcmpi(lpText, input) == 0)
{
// do stuff
}
虽然我现在感觉更安全了。
我只想知道另一个实现是否只是检查地址或大小,它是如何工作的?
我检查了一个LPCSTR的内存地址,它是0x0633522c的,另一个是0x028a91a4的。
这动摇了我的整个根基。
可能input
在你的第一个示例中是一个CString
实例,并且有一个重载operator==
采用原始 C 样式的字符串指针和一个CString
( const CString&
),这执行了字符串比较的正确操作。
实际上,在cstringt.h
ATL头文件中,您可以找到:
friend bool operator==( _In_z_ PCXSTR psz1, _In_ const CStringT& str2) throw() { return( str2.Compare( psz1 ) == 0 ); }