문제

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?

도움이 되었습니까?

해결책

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

다른 팁

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.

  • 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.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top