strtol not detecting integer overflow

1.2k Views Asked by At

I'm trying to convert a character array into an integer using strtol using the below code:

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

Where temp = 4000000010

However strtol does not detect the overflow, it does not set foo to LONG_MAX and errno does not change from its inital value of 0.

Instead bob is changed to the overflowed value of -294967286.

So I was wondering what am I missing here?

3

There are 3 best solutions below

3
On BEST ANSWER

The overflow probably occurs on the implicit long to int conversion in your statement, not inside strtol().

0
On

If you know you will get large numbers, why not use strtoll instead? Of course, like others remarked, then you definitively can't use an int to store the result.

4
On
  • You cannot store a variable of 4*10^9 in a 32-bit long. long is signed by default.
  • The maximum value of a long is (2^32 / 2)-1 = 2147483674, assuming long is 32 bit on your system.
  • Use strtoul() instead.
  • Change foo to unsigned long.