c++ - 阿尔法()?或其他...调试断言失败,circlemud 游戏

标签 c++ assertion isalpha

请原谅我使用翻译器。

我是编程初学者。

几十年的circlemud正在被改造。虽然已经本地化,可以在VC6.0中实现,没有任何问题,但是随着迁移到VS Community 2019,韩文名字的输入出现了问题。

游戏太老了,韩国的大部分社区都消失了,所以我找不到帮助,就去了那个地方。 我希望我能说一口流利的英语,但是...

输入韩语(CP949 或?)会导致 ishanalp() 崩溃。 我加/J编译的时候,韩文输入没有崩溃,就是认不出韩文名字。

移除 isalpha() 部分将允许访问游戏,但在打印或存储名称的区域会发生崩溃。

调试断言失败!

文件; isctype.cpp文件 行:36

表达式:c >= -1 && c < 255

#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;
   }

最佳答案

ishanalp(static_cast<unsigned char>(*arg))应该修复它,对 isnhspace 的调用进行相同的更改.

鲜为人知的是 is...字符分类函数不带 char参数,而是取一个 int参数必须有一个 unsigned char 值或者是 EOF .如果char是一个带符号的类型(通常是这样)并且你有一个负值然后 is...功能可能会失败。

我还建议将这些宏重新编码为内联函数。

关于c++ - 阿尔法()?或其他...调试断言失败,circlemud 游戏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56803389/

相关文章:

c++ - 在基类中是 const 而在派生类中不是 const 的虚函数

c++ - 我可以将 `stdin` 配置为从 C++ 字符串中读取吗?

javascript - 如何验证是否使用 Selenium 在 javascript 对象上调用了某些方法?

c - 如何正确使用有关字符串数组的 isalpha 函数?

python - 查找文本文件中所有单词的更快方法

c++ - 如何将 CString 转换为 byte[] 数组?

c++ - Linux Pybind11 'build check -j 4' 错误

testing - Testcafe 和软断言

JMeter 响应断言中的跨度标记出现问题

python-3.x - 波形符 TRUE 与 isalpha() 返回 -2 而不是 FALSE