#include <stdlib.h> long int strtol(const char *start, char **end, int radix);
Функция strtol() преобразует строковое представление числа, которое содержится в строке, адресуемой параметром-указателем start, в значение типа long int и возвращает полученный результат. Основание системы счисления, в которой представлено преобразуемое число, определяется параметром radix. Если значение radix равно нулю, то основание определяется так же, как и основание системы счисления при записи констант. Если значение radix не равно нулю, то оно должно быть целым числом от 2 до 36.
В версии С99 к параметрам start и end применен квалификатор restrict.
Функция strtol() работает следующим образом:
Сначала в строке, адресуемой параметром start, пропускаются пробелы, символы табуляции и пустой строки. Затем считывается число. Считывание заканчивается как только будет обнаружен символ, который не может быть частью длинного целого числа. К таким символам относятся пробелы, символы табуляции и пустой строки, знаки препинания и другие символы. Наконец, параметр end устанавливается так, чтобы указывать на "неиспользованный" остаток исходной строки, если таковой существует. Это означает, что, если функция strtol() вызывается с аргументом
"100 клещей"
она возвратит значение
100L
а параметр end будет указывать на пробел, предшествующий слову
"клещей"
Если результат не может быть представлен как значение типа long int, функция strtol() возвращает либо значение LONG_MAX, либо значение LONG_MIN, а глобальная переменная errno устанавливается равной значению ERANGE, свидетельствующему об ошибке из-за выхода за границы представимых чисел. Если параметр start не указывает на число, никакого преобразования не выполняется и функция возвращает нуль.
Следующая функция может использоваться для чтения из стандартного входного потока числа, представленного в десятичной системе счисления. Данная функция возвращает результат (целое число) типа long.
long int read_long(void) { char start[80], *end; printf("Введите число: "); gets(start); return strtol(start, &end, 10); }