Я обнаружил реализацию, которая сравнивает два 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 ); }
Других решений пока нет …