![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
GQU |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 272 Регистрация: 13.2.2011 Репутация: нет Всего: нет |
Язык PAWN
В файле записана фраза: Бан по Нику в кодировке utf- без BOM без пробелов и переносов строк Почему выдает НЕ равны...buffer1 = Бан по Нику..., buffer2 = Бан по Нику... т.е значение в переменных одинаковые, а функция equal() работает, как будто бы значения разные, если просто взять 2 одинаковых массива(не считывать с файла в массив), то equal работает правильно, говорит, что массивы равны
Это сообщение отредактировал(а) GQU - 24.10.2015, 01:11 |
|||
|
||||
feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
Всё-таки, это не C, это другой язык. Поэтому Бог его знает, каковы причины такого поведения
![]() Может, equal учитывает кодировки сравниваемых строк, и если они не совпадают, то и строки не совпадают, кто знает?Это точно проверено? Какова длина buffer1 в символах? А buffer2? PS В документации от August, 2007 нет функций fgets, equal, client_print. Что и как они делают, неясно совершенно. PPS В качестве теста можно записать в новый файл строку "Бан по Нику" в utf-8 и сравнить оба файла. -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
GQU |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 272 Регистрация: 13.2.2011 Репутация: нет Всего: нет |
Сделал посимвольный вывод buffer2, не пойму, откуда такие цифры, хотя все врубился, эта ж таблица UTF-8, а я аски смотрю
Посимвольный вывод buffer2 = Бан по Нику d0, 208 91, 145 d0, 208 b0, 176 d0, 208 bd, 189 20, 32 d0, 208 bf, 191 d0, 208 be, 190 20, 32 d0, 208 9d, 157 d0, 208 b8, 184 d0, 208 ba, 186 d1, 209 83, 131 А вот тут не понятно откуда берутся Посимвольный вывод buffer1 = Бан по Нику ffffffd0, -48 ffffff91, -111 ffffffd0, -48 ffffffb0, -80 ffffffd0, -48 ffffffbd, -67 20, 32 ffffffd0, -48 ffffffbf, -65 ffffffd0, -48 ffffffbe, -66 20, 32 ffffffd0, -48 ffffff9d, -99 ffffffd0, -48 ffffffb8, -72 ffffffd0, -48 ffffffba, -70 ffffffd1, -47 ffffff83, -125 Это сообщение отредактировал(а) GQU - 25.10.2015, 00:44 |
|||
|
||||
GQU |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 272 Регистрация: 13.2.2011 Репутация: нет Всего: нет |
Получается символы кодируются таблицей UTF-8
Б кодируется: в buffer2 символами do и 91 в шестнад системе, 2 байта в buffer1 символами ffffffdo и ffffff91, 8 байт, что за бред, зачем так много В самом файле каждый символ кодируется 2-мя байтами, кроме пробела Это сообщение отредактировал(а) GQU - 25.10.2015, 01:25 |
|||
|
||||
feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
Может, всё же
Добавлено через 2 минуты и 57 секунд Вот сразу вопрос к fgets'у. Что она делает? Потому что это целочисленные значения, не символы. -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
GQU |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 272 Регистрация: 13.2.2011 Репутация: нет Всего: нет |
да new забыл fgets считывает строку Бан по Нику из файла, т.е первую строку, еще раз вызовишь, считает вторую
не понимаю что то Это сообщение отредактировал(а) GQU - 25.10.2015, 03:50 |
||||
|
|||||
feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
Нет, не просто считывает, а ещё преобразует знаковый символ в знаковый интегер. В результате там, где значения в buffer2 положительны, в buffer1 они отрицательны. Массив символов в Вашем языке записывается как , а не как Дело не в new (я, честно говоря, даже не знаю, как у Вас без new работало, но если работало, то new не так важно). Дело в фигурных скобках (в отличии от квадратных). -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
GQU |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 272 Регистрация: 13.2.2011 Репутация: нет Всего: нет |
без new не компилируется, c фигурными скобками вместо квадратных тоже Это сообщение отредактировал(а) GQU - 25.10.2015, 04:19 |
|||
|
||||
feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
И где затык? При вызове fgets? -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
GQU |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 272 Регистрация: 13.2.2011 Репутация: нет Всего: нет |
да, вообще я уже решил проблему после fgets добавить
EOS что то вроде '\0' в СИ Это сообщение отредактировал(а) GQU - 25.10.2015, 04:31 |
||||
|
|||||
feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
-------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |