#include<limits.h>
#include<errno.h>
long output;
errno = 0;
output = strtol(input,NULL,10);
printf("long max = %ld\n",LONG_MAX);
printf("input = %s\n",input);
printf("output = %ld\n",output);
printf("direct call = %ld\n",strtol(input,NULL,10));
if(errno || output >= INT_MAX || output <= INT_MIN) {
printf("Input was out of range of int, INT_MIN = %d, INT_MAX = %d\n",INT_MIN,INT_MAX);
printf("Please input an integer within the allowed range:\n");
}
, когда приведенный выше код снабжается входным массивом {'1', '2', '3', '4', '5', '6', '7', '8', '9' , '0', '1'}
я получаю вывод:
long max = 9223372036854775807
input = 12345678901
output = -539222987
direct call = 3755744309
что происходит ... strtol, похоже, страдает от переполнения, но не устанавливает errno