0

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

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

其中温度 = 4000000010

但是 strtol 没有检测到溢出,它没有将 foo 设置为 LONG_MAX 并且 errno 没有从它的初始值 0 改变。

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

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

4

3 回答 3

3

溢出可能发生在您的语句中的隐式转换上,而不是long在.intstrtol()

于 2011-10-25T12:54:43.963 回答
0

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

于 2011-10-25T13:00:23.000 回答
0
  • 您不能以 32 位长存储 4*10^9 的变量。long 是默认签名的。
  • long 的最大值是 (2^32 / 2)-1 = 2147483674,假设 long 在您的系统上是 32 位。
  • 使用strtoul () 代替。
  • 将 foo 更改为unsigned long
于 2011-10-25T13:00:25.503 回答