c中为什么用isalpha()判断汉字是有时会判断是字母

如判断“名”的第二个字符就会被判断成字母

我们先看一下函数原形:
函数:isalpha
原型:int isalpha(int ch)
用法:头文件加入#include <ctype.h>
功能:判断字符c是否为英文字母,当c为英文字母a-z或A-Z时,在标准c中相当于使用“isupper(c)||islower(c)”做测试,返回非零值,否则返回零。

函数接受一个int类型的参数,而“名”的第二个字符是251,转换为int为-5,所以isalpha会判断为字母,我试了一下小于-1或大于257的值都会判断为字母,这可能是函数的bug吧!
解决办法是把实参强制转换为unsigned char型:
char s[3] = "名";
if( isalpha( ( unsigned char )s[1] ) )
{}
温馨提示:答案为网友推荐,仅供参考
相似回答