首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >strtol未检测到整数溢出

strtol未检测到整数溢出
EN

Stack Overflow用户
提问于 2011-10-25 20:51:14
回答 3查看 1K关注 0票数 0

我尝试使用以下代码使用strtol将字符数组转换为整数:

代码语言:javascript
运行
复制
int foo = strtol(temp, (char **)NULL, 0);

其中temp = 4000000010

但是,strtol不会检测到溢出,它不会将foo设置为LONG_MAX,errno也不会从初始值0开始更改。

相反,bob被更改为溢出值-294967286。

所以我想知道我错过了什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-10-25 20:54:44

溢出可能发生在语句中的隐式longint转换中,而不是strtol()内部。

票数 3
EN

Stack Overflow用户

发布于 2011-10-25 21:00:23

如果你知道你会得到很大的数字,为什么不使用strtoll呢?当然,就像其他人所说的那样,您肯定不能使用int来存储结果。

票数 0
EN

Stack Overflow用户

发布于 2011-10-25 21:00:26

  • 不能将4*10^9的变量存储在32位长度中。默认情况下,long是带符号的。
  • 假设系统上的long为32位,则long的最大值为(2^32 / 2)-1 = 2147483674。
  • 改用strtoul()。
  • 将foo更改为未签名的foo
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7889516

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档