Chinaunix首页 | 论坛 | 博客
  • 博客访问: 168998
  • 博文数量: 30
  • 博客积分: 296
  • 博客等级: 二等列兵
  • 技术积分: 407
  • 用 户 组: 普通用户
  • 注册时间: 2010-06-16 21:37
个人简介

a

文章分类

全部博文(30)

文章存档

2016年(1)

2015年(8)

2014年(1)

2013年(11)

2012年(6)

2011年(1)

2010年(2)

分类: C/C++

2013-01-24 22:33:00

今天调查了一个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()时还是需要注意一下。


阅读(2284) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~