我有一个 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(使用前将#替换为@)