strtol没有检测到整数溢出

时间:2011-10-25 12:51:14

标签: c overflow c99 strtol

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

int foo = strtol(temp, (char **)NULL, 0);

凡temp = 4000000010

然而strtol没有检测到溢出,它没有将foo设置为LONG_MAX并且errno不会从其初始值0改变。

而是将bob更改为溢出值-294967286。

所以我想知道我在这里失踪了什么?

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

如果您知道自己会获得大数字,为什么不使用strtoll呢?当然,和其他人一样,那么你肯定不能使用int来存储结果。

答案 2 :(得分:0)

  • 您不能在32位长度中存储4 * 10 ^ 9的变量。 long默认签名。
  • long的最大值是(2 ^ 32/2)-1 = 2147483674,假设系统上有32位长。
  • 请改用 strtoul ()。
  • 将foo更改为 unsigned long