PDA

Просмотр полной версии : [Вопрос] strcmp и русские символы



somebodies
04.06.2017, 02:54
Привет! есть проблема связанная с функцией strcmp.
Она некорректно сравнивает строчки, которые состоят из русских букв.
эта проблема имеется во всех С-подобных языках, как я узнал из поисковика.
однако решения на pawn не нашел.
надеюсь на помощь, заранее благодарю.

DeimoS
04.06.2017, 12:37
memcmp (http://pro-pawn.ru/showthread.php?14392-TDW-String-Library)?

somebodies
05.06.2017, 02:01
В инклудах этой библиотеки эту функцию искал, но эта функция указана лишь в списке функций, а фактически ее нет. Даже при подключении инклуда и прописывании memcmp при компиляции пишет: error 017: undefined symbol "memcmp"
Либо я слепой, либо я что-то не так делаю, либо автор инклуда забыл вписать функцию?

VVWVV
05.06.2017, 02:08
В инклудах этой библиотеки эту функцию искал, но эта функция указана лишь в списке функций, а фактически ее нет. Даже при подключении инклуда и прописывании memcmp при компиляции пишет: error 017: undefined symbol "memcmp"
Либо я слепой, либо я что-то не так делаю, либо автор инклуда забыл вписать функцию?



stock
memcmp(const string1[], const string2[], n)
{
// Converts the value to bytes.
#emit load.s.pri n // pri = n
#emit shl.c.pri 2 // pri <<= 2
#emit stor.s.pri n // n = pri
// Addresses..
#emit load.s.pri string1 // pri = string1
#emit load.s.alt string2 // alt = string2
// Compare the memory blocks
#emit cmps n
// Returns zero if the blocks are equal.
#emit retn
return 0;
}

somebodies
05.06.2017, 02:21
stock
memcmp(const string1[], const string2[], n)
{
// Converts the value to bytes.
#emit load.s.pri n // pri = n
#emit shl.c.pri 2 // pri <<= 2
#emit stor.s.pri n // n = pri
// Addresses..
#emit load.s.pri string1 // pri = string1
#emit load.s.alt string2 // alt = string2
// Compare the memory blocks
#emit cmps n
// Returns zero if the blocks are equal.
#emit retn
return 0;
}

Спасибо. Впринципе, понял как работает функция, но для чего нужен аргумент "n"? не сильно разбираюсь в АМХ-конструкциях

somebodies
05.06.2017, 20:43
К сожалению, данная функция также не помогла.
Просьба о помощи все еще актуальна :c

ziggi
05.06.2017, 21:55
Код покажи, что-то мне подсказывает, что проблема не в этом.

somebodies
05.06.2017, 22:05
Код покажи, что-то мне подсказывает, что проблема не в этом.
Я уже отдельно дебажил все части кода, которые участвуют в процессе сравнения (там данные для сравнения получаются из разных источников). Все работает. Но как дело доходит до сравнения, то все. Пиши пропало. Однако, может я кривой ( вероятнее всего ).
Напишу в ЛС вам.
Ибо участки там довольно запутанные, и придется расписывать скорее всего, а здесь это делать не совсем кошерно

ziggi
05.06.2017, 22:29
Я уже отдельно дебажил все части кода, которые участвуют в процессе сравнения (там данные для сравнения получаются из разных источников). Все работает. Но как дело доходит до сравнения, то все. Пиши пропало. Однако, может я кривой ( вероятнее всего ).
Напишу в ЛС вам.
Ибо участки там довольно запутанные, и придется расписывать скорее всего, а здесь это делать не совсем кошерно

Мог и здесь написать. В общем, проблема, скорее всего, связана с PVar. Подробнее здесь: http://pro-pawn.ru/showthread.php?13007-Баг-в-GetPVarString-GetSVarString-и-как-его-исправить

somebodies
05.06.2017, 22:44
Мог и здесь написать. В общем, проблема, скорее всего, связана с PVar. Подробнее здесь: http://pro-pawn.ru/showthread.php?13007-Баг-в-GetPVarString-GetSVarString-и-как-его-исправить
Я уже натыкался на эту тему. В первый раз вставил функцию не в тот stock.
Попробовал сейчас с другой функцией. Работает. спасибо, что навел на эту мысль снова.
Можно закрывать.