当前位置: 首页 > news >正文

浙江省住房和城乡建设厅干部学校网站上海网络营销的企业

浙江省住房和城乡建设厅干部学校网站,上海网络营销的企业,怎么建立一个网站搜关键词会跳出,网页设计优秀案例分析文章目录小结问题及解决参考小结 使用sprintf(...)进行格式化是一种标准的做法,但是这样做是有一个极大的风险,由于sprintf(...)不进行边界检查,这样会有写操作溢出边界的风险,并导致程序崩溃。本文进行了简单写操作溢出边界的测…

文章目录

  • 小结
  • 问题及解决
  • 参考

小结

使用sprintf(...)进行格式化是一种标准的做法,但是这样做是有一个极大的风险,由于sprintf(...)不进行边界检查,这样会有写操作溢出边界的风险,并导致程序崩溃。本文进行了简单写操作溢出边界的测试,模拟程序崩溃,并建议了更为安全的snprintf(...)方法进行格式化。

问题及解决

众所周知,sprintf(...)不进行边界检查,再加上double或者是float的内建的数据类型一起使用(有时候会是一个比较大的正数),比较容易出现写操作溢出边界并导致程序崩溃,已经是臭名昭著了。

以代码sprintf(str, "%.2fMB(%.2f%%)", double_a, double_b);为例。

sprintf的说明指示符%.2f规定了小数点后面截取两位,但小数点前面有多少位就采用多少位,例如像2.4008127812204012E+159这样的大数,基本上小数点前面就超过160位数字了。如果数组str比较小,就抓瞎了,写操作会溢出边界,并致程序崩溃。这种错误有时候极难定位,浪费很多宝贵的时候来找bug。

如果采用比较安全的做法, 例如: snprintf(str_short, 30, "%.2fMB(%.2f%%)", double_a, double_b);,规定了边界,只写入前29位(最后再加一个结尾符),这样就不用担心写操作会溢出边界的问题了。

以下是程序测试很好地模拟了几种情况(double_a是一个很大的数,double_b是一个很小的数):

	char str[200];char str_short[30];double double_a= 2.4008127812204012E+159;double double_b= 1.3906711615670009E-309;cout << "double_a= " << double_a<< endl;cout << "double_b= " << double_b<< endl;//以下代码不会出现溢出边界,程序正常运行sprintf(str, "%.2fMB(%.2f%%)", double_a, double_b);cout << "str string = " << strStorage << endl;//以下代码会出现溢出边界并导致程序崩溃, 注释之//sprintf(str_short, "%.2fMB(%.2f%%)", double_a, double_b);//cout << "str_short string = " << str_short<< endl;//以下代码是比较安全的做法,进行有效的边界检查, 不会出现溢出边界,程序正常运行,输出了29位数字(后接一个结尾符)snprintf(str_short, 30, "%.2fMB(%.2f%%)", double_a, double_b);cout << "str_short string = " << str_short<< endl;system("pause");return 0;

输出结果:

double_a= 2.40081e+159
double_b= 1.39067e-309
str string = 2400812781220401246196118053255811918339999978374591715533604156445593861118215728144462510983065193819073699313679732935503602200085321608454731838025375940608.00MB(0.00%)
str_short string = 24008127812204012461961180532
Press any key to continue . . .

参考

sprintf(str,“%f”, voltage_temp ); works in C but not C ++
C++ Buffer Overflow: Format String (%f/%F)
Stackoverflow: understanding the dangers of sprintf(…)
C++ float and double

http://www.yayakq.cn/news/622688/

相关文章:

  • 常用的网站开发语言搭建服务器做网站
  • 邢台网站设计厂家公司网站开发与维护
  • 陕西华伟建设有限公司网站网页界面设计和软件界面设计的区别
  • 网站付费推广个体工商户可以做网站吗
  • 台州品牌网站设计千万不要学电子信息工程
  • 网站建设论文读书笔记定制网站开发冬天里的白玫瑰
  • 2017网站建设报价方案用记事本做网站怎么添加表格
  • 联享品牌网站建设公司泰安网站建设收费标准
  • 遂宁商城网站建设方案领域网站建设
  • 上海 餐饮网站建设 会员系统建设电商网站哪个平台比较好
  • 贵阳市建设局网站旅游网站建设方
  • 公司做网站属于什么费用以小说名字做网站的小说网
  • 网站建设ui设计公司上海高端设计公司
  • 临沧市住房和城乡建设局门户网站手机什么网站可以设计楼房
  • html网站制作答辩ppt互联网推广怎么做
  • 温州建设诚信评价网站公示西安市公司
  • 商务网站建设实训结论简易crm
  • 仿做网站的网站绵阳的网站制作公司
  • 菜馆网站制作自助网站模板平台
  • 资源交易网站代码wordpress google字体 360
  • 广州站是指哪个站repress wordpress
  • 大石桥城乡规划建设局网站wordpress dux主题破解安装
  • 微信平台微网站开发网站 chat now怎么做
  • 做团购网站多少钱高端设计公司名字大全
  • 网站基础模块建设网站正能量免费下载
  • 排名网站成都seo培训机构
  • 注册免费微网站桂林亿星网络科技公司
  • 网站建设用户调查报告wordpress 首页进不去
  • 论述市场营销对网站设计的影响学了lamp做网站就足够了吗
  • 网站建设的国内外现状装修网站建设优缺点