数据类型不匹配引起的bug

来源:互联网 发布:喜马拉雅fm mac 编辑:程序博客网 时间:2024/05/01 02:20

源代码如下:

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<contentLen;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)的类型相匹配


0 0