isalpha() 给出一个断言

2024-03-29

我有一个 C 代码,其中在 ctype.h 中使用标准库函数 isalpha(),这是在 Visual Studio 2010-Windows 上。 在下面的代码中,如果 char c 是“£”,则 isalpha 调用将返回一个断言,如下面的快照所示:

char c='£';

if(isalpha(c))
{
    printf ("character %c is alphabetic\n",c);

}
else
{
    printf ("character %c is NOT alphabetic\n",c);
}

我可以看到这可能是因为 8 位 ASCII 没有这个字符。

那么如何处理 ASCII 表之外的此类非 ASCII 字符呢?

我想要做的是,如果找到任何非字母字符(即使它包含不在 8 位 ASCII 表中的此类字符),我希望能够忽略它。


您可能想要将发送到的值转换为isalpha(以及中声明的其他函数<ctype.h>) to unsigned char

isalpha((unsigned char)value)

这是在 C 语言中适合使用强制转换的少数情况之一。


编辑添加解释。

根据标准 http://www.open-std.org/JTC1/sc22/wg14/www/docs/n1256.pdf,重点是我的

7.4

1 标题<ctype.h>声明几个对分类和映射有用的函数 人物。在所有情况下,参数都是int,其值为 可以表示为unsigned char或应等于宏的值EOF. 如果 参数具有任何其他值,行为未定义。

演员阵容unsigned char确保通话isalpha()不调用未定义行为。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

isalpha() 给出一个断言 的相关文章

随机推荐