isdigit的使用

2250阅读 0评论2013-01-24 lzj123
分类:C/C++

今天调查了一个bug,最终确认是用函数isdigit判断一个字符串的前几位是否是数字时出了问题。

程序的运行环境是hp-ux, 这个字符串包含一些特殊字符(无符号值大于127),在判断那些特殊字符时,

isdigit函数返回了非0,也就是判断为真了。


下面是不同的编译器下的isdigit判断结果

hp-ux(cc)

char c = 0xEF;

isdigit(c)返回非0,判断为真

isdigit((unsigned char)c)返回0, 判断为假.


linux下(gcc):


char c = 0xEF;

isdigit(c)返回0,判断为假

isdigit((unsigned char)c)返回0, 判断为假.


winxp下(gcc):

char c = 0xEF;

isdigit(c)返回非0,判断为真. 

isdigit((unsigned char)c)返回0, 判断为假.


函数isalpha,isalnum也有同样的现象。其实isdigit的原型是


int isdigit(int c);

如果字符串中含有特殊字符时,为了可移植,使用isdigit()时还是需要注意一下。


上一篇:getopt ,getopt_long使用方法
下一篇:链接的 multiple definition错误