ISALPHA ()? или другие ... не удалось отладочное утверждение - PullRequest
0 голосов
/ 28 июня 2019

Пожалуйста, извините за использование переводчика.

Я новичок в программировании.

Многолетняя круговая грязь модифицируется. Хотя он уже локализован и может быть без проблем реализован в VC6.0, существует проблема с вводом корейских имен при его переходе на VS Community 2019.

Игра настолько старая, что большая часть сообщества в Корее исчезла, поэтому я не смог найти помощь и посетил это место. Хотел бы я хорошо говорить по-английски, но ...

При вводе корейского языка (CP949 или?) Произойдет сбой ishanalp (). Когда я добавил / J и скомпилировал его, в корейском вводе не происходит сбой, но я не могу распознать корейское имя.

Удаление части isalpha () позволит получить доступ к игре, но в области, где напечатано или сохранено имя, произойдет сбой.

Отладочное утверждение не удалось!

Файл; isctype.cpp Линия: 36

выражение: c> = -1 && c <255 </h2> #define ishan(ch) (((ch) & 0xE0) > 0x90) #define ishanasc(ch) (isascii(ch) || ishan(ch)) #define ishanalp(ch) (isalpha(ch) || ishan(ch)) #define isnhdigit(ch) (!ishan(ch) && isdigit(ch)) #define isnhspace(ch) (!ishan(ch) && isspace(ch)) int _parse_name(char *arg, char *name) { int i; /* skip whitespaces */ for (; isnhspace(*arg); arg++); for (i = 0; (*name = *arg); arg++, i++, name++) if (!ishanalp(*arg)) // here debug assertion failed line 36 return 1; if (!i) return 1; return 0; }

1 Ответ

1 голос
/ 28 июня 2019

ishanalp(static_cast<unsigned char>(*arg)) должен исправить это, то же самое изменение для звонка на isnhspace.

Малоизвестно, что функции классификации символов is... не принимают аргументов char, а вместо этого принимают аргумент int, который должен иметь значение без знака или быть EOF.Если char является типом со знаком (как это обычно бывает) и у вас отрицательное значение, то функция is... может завершиться ошибкой.

Я бы также рекомендовал перекодировать эти макросы как встроенные функции.

...