4

我发现了一个比较两个 LPCSTR 执行以下操作的实现:

void check(LPCSTR lpText)
{
    if(lpText == input)
    {
         // do stuff
    }
}

问题是它有效。我把它换成...

if(lstrcmpi(lpText, input) == 0)
{
    // do stuff
}

虽然我现在感觉更安全了。

我只是想知道其他实现是否只是检查地址或大小,它是如何工作的?

我检查了一个LPCSTR的内存地址,它是0x0633522c,另一个是0x028a91a4。

这动摇了我的整个基础。

4

1 回答 1

5

可能input在您的第一个示例中是一个CString实例,并且operator==采用原始 C 样式字符串指针和CString( const CString&) 的重载,这可以进行正确的字符串比较。

其实在cstringt.hATL头文件中,可以找到:

friend bool operator==(
    _In_z_ PCXSTR psz1,
    _In_ const CStringT& str2) throw()
{
    return( str2.Compare( psz1 ) == 0 );
}
于 2014-02-28T17:08:43.340 回答