今天调查了一个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, 判断为假.
int isdigit(int c);
如果字符串中含有特殊字符时,为了可移植,使用isdigit()时还是需要注意一下。