|
楼主 |
发表于 2003-6-23 09:03:30
|
显示全部楼层
最初由 dreamrise 发表
程序要改正起来其实很简单:
- int main(void)
- {
- int var1=0;
- char var2=0;
- int var3=0;
- char str_val1[]="24\n";
- char str_val2[]="32\n";
- char str_val3[]="48\n";
- sscanf(str_val1,"%d",&var1);
- sscanf(str_val2,"%c",&var2); #把原来的%d改成%c
- sscanf(str_val3,"%d",&var3);
- printf("var1=%d,var2=%c,var3=%d\n",var1,var2,var3); #把原来的%d改成%c
- }
复制代码
这样输入var2=‘3’,程序本身的bug是修复了,但意思和原来的可能就不一样了。
其实这个问题可能引发的相关问题还是可以讨论的。
1。如果把char var2=0;放在第一句,程序有可能直接core,特别是这样的代码在一个子函数内实现。
2。大家在写程序的时候局部变量可能不会用到char来进行访问,但如果是内存中的大量结构struct (char var1;}是很有可能出现的,为了节省空间,有的人经常这么干。这样由此引发了很多潜在的bug,特别是基于内存操作和指针链表等实现某种算法的时候(比如hash表,很常用的)。别人写的数据结构可能非常稳定了,就像sscanf一样,但外围实现代码的人却很有可能犯这样的错误导致无法预料的结果。
3。还有很多...... |
|