AnsiStrIComp терпит неудачу при сравнении строк в Delphi 2010
Я немного запутался и надеюсь на просветление.
Я использую Delphi 2010 для этого проекта и пытаюсь сравнить 2 строки.
Использование кода ниже не удается
if AnsiStrIComp(PAnsiChar(sCatName), PAnsiChar(CatNode.CatName)) = 0 then...
Потому что в соответствии с отладчиком сравнивается только первый символ каждой строки (т. е. если sCatName "Automobiles", PAnsiChar(sCatName) ИС "A").
В этом случае я ищу совпадение, но у меня есть другие функции, используемые для сортировки и т. д. где мне нужно знать, как сравниваются строки (меньше, равно, больше).
2 ответа:
Я предполагаю, что
sCatNameиCatNode.CatNameопределены какstrings (=UnicodeStrings)?. Так и должно быть.Нет необходимости преобразовывать строки в строки с нулевым завершением! Это вам (в основном) нужно делать только при работе с Windows API.
Если вы хотите проверить равенство двух строк, используйте
SameStr(S1, S2)(чувствительное к регистру соответствие) илиSameText(S1, S2)(нечувствительное к регистру соответствие), или простоS1 = S2в первом случае. Все три варианта возвращаютtrueилиfalse, в зависимости от равенства строк.Если вы хотите получить числовое значение, основанное на порядковых значениях символов (как при сортировке), затем используйте
CompareStr(S1, S2)илиCompareText(S1, S2). Они возвращают отрицательное целое число, ноль или положительное целое число.(Возможно, вы захотите использовать функции
Ansi-:AnsiSameStr,AnsiSameText,AnsiCompareStr, иAnsiCompareText; эти функции будут использовать текущую локаль. НеAnsi-функции будут принимать третий, необязательный параметр, явно указывающий используемую локаль.)Обновление
Пожалуйста, прочтите Реми Лебо. комментарии относительно причины проблемы.