设为首页 加入收藏

TOP

数据类型不匹配引起的bug
2014-11-24 01:42:57 来源: 作者: 【 】 浏览:0
Tags:数据 类型 匹配 引起 bug

源代码如下:

char checkSum(char fn, char *pcontent, unsigned int contentLen)
{
char checksum=0, i;
char tmp[3]={0};


sprintf(tmp, "%02X", (BYTE)fn);
checksum=tmp[0]+tmp[1];


for(i=0;i
{
checksum = checksum + pcontent[i];
}
return checksum;
}

咋看这段代码是没有问题的,其实这段代码存在很大的隐患,如果不仔细看是看不出来的。

那么,如果我告诉你是由于数据类型引起的bug, 那么你肯定会很快找到的。

不绕圈了,我来说说,这个bug的在什么情况下会发生。

出现bug的情况:

条件:

pcontent is "12344 jkkkkkkkkkkkkkkkkkkkkkkkkkk kikkdddddddddddddddddddddd***************** dfddddddddddddddd sddddddddddddddddddddddddddddddddddllllllllllllllllllllllllllllllllfffffffffffffff ooooooooooooooooooooo"

contentLen是pcontent的长度

结果:

checksum 跟预期的值不一样。


bug:

i是char类型,而pcontent是unsigned int类型

i的最大值是127 远远小于contentLen的值所以出现了bug


结论:在写循环代码时一定要注意循环变量(i)与条件变量(contentLen)的类型相匹配


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇struts2实现猜数字游戏 下一篇数据结构之哈希表的java实现

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: