Сравнение двух LPCSTR с ==

Я обнаружил реализацию, которая сравнивает два LPCSTR, делая следующее:

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

Проблема в том, что это работает. Я заменил его на...

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

и хотя сейчас я чувствую себя в большей безопасности.

Я просто хотел узнать, проверяет ли другая реализация адреса или размеры, как это работает?

Я проверил адрес памяти одного LPCSTR, и это 0x0633522c, а другой 0x028a91a4.

Это потрясает весь мой фундамент.

1 ответ

Решение

Наверное 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 );
}
Другие вопросы по тегам