C++ isalpha()?或者其他人。。。调试断言失败,circlemud游戏

C++ isalpha()?或者其他人。。。调试断言失败,circlemud游戏,c++,assertion,isalpha,C++,Assertion,Isalpha,请原谅我使用了翻译 我是编程的初学者 已有数十年历史的circlemud正在被修改。尽管它已经本地化,并且可以在VC6.0中实现,没有任何问题,但在迁移到VS Community 2019时,在输入韩语名称方面存在问题 这个游戏太古老了,韩国的大部分社区都消失了,所以我找不到帮助,就去了那个地方。 我希望我能说一口流利的英语,但是 输入朝鲜语CP949或?将导致ishanalp崩溃。 当我添加/J并编译它时,韩语输入中没有崩溃,但我无法识别韩语名称 移除isalpha部分将允许访问游戏,但在打印

请原谅我使用了翻译

我是编程的初学者

已有数十年历史的circlemud正在被修改。尽管它已经本地化,并且可以在VC6.0中实现,没有任何问题,但在迁移到VS Community 2019时,在输入韩语名称方面存在问题

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

输入朝鲜语CP949或?将导致ishanalp崩溃。 当我添加/J并编译它时,韩语输入中没有崩溃,但我无法识别韩语名称

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

调试断言失败

档案;isctype.cpp 电话号码:36

表达式:c>=-1&&c<255 ishanalpstatic_cast*arg应该修复它,对isnhspace的调用也做了相同的更改

鲜为人知的是。。。字符分类函数不接受char参数,而是接受必须具有无符号char值或为EOF的int参数。如果char是一个有符号类型,通常是这样的,并且您有一个负值,那么。。。功能可能会失败

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

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