GETLINE文件读取LONG LONG 出问题的原因

http://www.yyycode.cn/index.php/2020/05/28/getline%e6%96%87%e4%bb%b6%e8%af%bb%e5%8f%96long-long-%e5%87%ba%e9%97%ae%e9%a2%98%e7%9a%84%e5%8e%9f%e5%9b%a0/


这里的intstr1读出来和str是不一样的。我的oppophone定义的是longlong类型。估计是超了atoi的函数之类的。

用atoi来将字符串转换为int类型。
例如atoi(“12345”)返回整数12345。
当期望转换的类型是uint32_t的时候,有些兄弟可能会这么写:(uint32_t)atoi(“3000000000”),这在64位机器上运行是正确的,返回整数30亿;但是当迁移到32位机器上时,就出错了,只能返回2147483647,即0x7FFFFFFF。
这是因为atoi内部使用了strtol 函数来实现,而strtol返回long,在64位机器上long是8byte长,覆盖到了int和uint32_t的所有值;而在32位机器上,long跟int的取值域是等同的,超过int取值域字符串就只能取到边界值了。
所以说,用atoi来转换uint32_t类型的时候,代码其实是有风险的,甚至是不正确的,建议用atoll、strtoul、或者sscanf(“3000000000”, “%u”, &uint32)这样的方法来转换。
————————————————
版权声明:本文为CSDN博主「清风徐来918」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/cui918/article/details/53217099

所以这里有两个方法解决,一个是把longlong定义的类型改成string。另一个解决办法就是把atoi换成atoll.实测有效

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值