Страница man говорит о втором аргументе следующее:
Если endptr не равен NULL, strtol () сохраняет адрес первого
недопустимый символ в * endptr. Если бы не было цифр вообще,
strtol () сохраняет исходное значение nptr в * endptr (и
возвращает 0). В частности, если * nptr не '\ 0', а ** endptr
'\ 0' при возврате, вся строка действительна.
Например:
char str[] = "123xyz45";
char *p;
long x = strtol(str, &p, 10);
printf("x=%ld\n", x);
printf("p - str = %d\n", p - str);
printf("*p = %c\n", *p);
printf("p (as string) = %s\n", p);
Выход:
x=123
p - str = 3
*p = x
p (as string) = xyz45
Мы можем видеть, что когда strtol
возвращает p
, указывает на первый символ в str
, который не может быть преобразован. Это может быть использовано для последовательного разбора строки или для просмотра, можно ли преобразовать всю строку или есть ли дополнительные символы.
В нашем примере первый символ в string
, а именно «p», не является десятичной цифрой, поэтому ничего не преобразуется и функция возвращает 0.