Правильно проверить ошибки от strtol()
сложно.Вам нужен код, подобный приведенному ниже:
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <limits.h>
int main()
{
char *n = "3087663490";
char *p;
long test;
errno = 0;
test = strtol(n, &p, 10);
if (p == n)
printf("No digits found.\n");
else if ((test == LONG_MIN || test == LONG_MAX) && errno == ERANGE)
printf("Value out of range.\n");
else
printf("Value is %ld\n", test);
return 0;
}
Выполнение этого показывает, в чем ваша проблема - Value out of range.
.Используйте более широкий тип, например long long
(и strtoll()
).