网创优客建站品牌官网
为成都网站建设公司企业提供高品质网站建设
热线:028-86922220
成都专业网站建设公司

定制建站费用3500元

符合中小企业对网站设计、功能常规化式的企业展示型网站建设

成都品牌网站建设

品牌网站建设费用6000元

本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...

成都商城网站建设

商城网站建设费用8000元

商城网站建设因基本功能的需求不同费用上面也有很大的差别...

成都微信网站建设

手机微信网站建站3000元

手机微信网站开发、微信官网、微信商城网站...

建站知识

当前位置:首页 > 建站知识

对整型变量存储溢出的一些思考-创新互联

今天在网上看到一篇文章,介绍了一个因为错误使用整型变量而产生的bug。

目前成都创新互联公司已为近千家的企业提供了网站建设、域名、雅安服务器托管网站托管、企业网站设计、河津网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。

文中有一小段我未能理解:

很显然,大量程序员考虑不周,使用4个字节的整数保存电话号码。当用户输入的号码大于2147483647时,就会自动转成这个数字。

我发现评论里有许多人和我有类似的疑问:为什么输入一个很大的数字之后,会自动转换成2147483647,而不是报错或者变成其他奇怪的值。

经过和网友的讨论,我做了一些实验,来测试当试图存入一个会溢出的数字时,会发生什么?

测试用代码:

int a = (int) 0xAABBCCDDEEFF1122LL;//若不使用强制类型转换,编译器会报错
printf("%d %X",a,a);

运行后的结果:

-285273822 EEFF1122

我发现,这个超长的整数在赋值之前被截断了,而并非像文章中所描述的那样取了整型范围内的大值。

这时有人指出,在操作MySQL数据库时,如果插入的整数值超过其大范围,会取范围内允许的大值。同时附上了截图

至此,我的困惑才得以解答。原来是在数据库存储时,使用了错误的数据类型,才导致了这个bug出现。

类似的问题如果出现在生产环境中,将带来不小的灾难,所以作为操作数据库的程序员、测试、运维人员,有必要借助良好的规范和可靠的工具来避免事故的发生。

对数据库的SQL操作进行审计,是有必要的。

借助SQLDEV,可以方便的查看、审计、溯源每一行SQL语句。还能针对不同角色,自定义字段屏蔽、打码规则

支持的数据源类型也有很多,尤其是对大量国产数据库做了兼容

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


名称栏目:对整型变量存储溢出的一些思考-创新互联
链接地址:http://bjjierui.cn/article/cscpji.html

其他资讯