记一次数据类型长度踩的坑

前言

写这篇博客纯粹是为了记录一下自己的惨痛经历,因为数据长度越界,对数据长度不敏感,导致一个问题找了一个下午,加深一下对数据长度的理解

数据类型有哪些

实质上,在C语言里面,数据类型只有4种,整型,浮点型,指针,聚合类型(数组,结构体),其他都是衍生而来
这里只是对常用的数据类型总结一下:

数据类型32位机器下范围
char (1字节)0~127
unsigned char(1字节)0 ~ 255
signed char(1字节)-127 ~ 127
short int(2字节)-32767 ~ 32767
unsigned short int(2字节)0 ~ 65535
int(4字节)-2147483647~ 2147483647
unsigned int(4字节)0 ~ 4294967295
long int(4字节)-2147483647 ~ 2147483647
unsigned long int(4字节)0 ~ 4294967295

注意这里写的是32位机器范围,最后能决定长度范围的是你的编译器的最高位是多少

就是这个地方让我吃了大亏,在使用strtol函数时,没注意解析出来的数已经超过了long int ,4个字节的长度,导致查了一下午。最为致命的是,写了个demo在本地跑,同样的数据同样的代码没有出错,结果放到另外一个环境下运行时,就报错了,所以以后平台移植以及数据长度一定得注意。
本地能跑过时因为本地编译的C语言用的64位去编的,64位下的long int 是8字节,所以没报错。
将strtol 改为 strtoll就好了。

这里有篇不错的博客,详细介绍了32位和64位下数据长度的变化:
http://blog.sina.com.cn/s/blog_57421ff80100c7g1.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值