数据类型不匹配引起的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)的类型相匹配。
- 数据类型不匹配引起的bug
- 基本数据类型double和封装类型Double引起的bug
- Ubuntu连接投影仪时,分辨率不匹配引起的错误
- unsigned引起的bug
- typedef引起的bug
- 数据类型不一致时,a=b=c表达式引起的bug
- 缺jar引起的bug
- memcpy引起的一个bug
- 字符串拷贝引起的bug
- 一个分号引起的bug
- Environment.CurrentDirectory引起的BUG
- 小问题引起的bug
- 一次memcpy引起的bug
- redis - 空格引起的bug
- 字段定义引起的bug
- 一个BUG引起的思考
- OLDB读取excel的数据类型不匹配的解决方案
- OLDB读取excel的数据类型不匹配的解决方案【转】
- 用PL/SQL Developer 把oracle表里的数据导成insert语句(不积跬步,无以至千里)
- 游戏服务器之网格视野列表
- struts2配置文件详解2
- 《黑马程序员》 日期与毫秒值互转 String类型日期与Date对象互转
- 【笔记】2013-07
- 数据类型不匹配引起的bug
- 空格带给我我的血的教训
- 如何定义HtmlHelper扩展方法
- TOJ 3489 Dog Numbering 取模运算&&组合 水~
- C\C++字符串转化成整数
- dw_1.object.id[row]是什么意思?
- oracle错误解决积累
- easy ui datagrid动态生成列 支撑嵌套对象
- 如何定义HtmlHelper扩展方法