strtol, strtoll - перевод строки в длинное целое (long int)
СИНТАКСИС
#include <stdlib.h>long intstrtol(const char *nptr, char **endptr, int base);long long intstrtoll(const char *nptr, char **endptr, int base);
ОПИСАНИЕ
Функция strtol() конвертирует начальную часть строки nptr
в длинное целое в соответствии с указанным base, которое должно
находиться в диапазоне от 2-х до 36-х включительно или быть равным
нулю.
Строка должна начинаться с пустых символов (определяемых при помощи
isspace(3)),
далее должен следовать один знак: `+' или `-' (если есть). Если
base равно нулю или 16-и, то строка может начинаться с приставки
`0x', что означает использование шестнадцатеричной системы исчисления;
иначе, если base равно нулю, используется десятичная система
исчисления, кроме случая, когда последующий символ также равен `0':
тогда используется восьмеричная система исчисления.
Остаток строки, таким образом, конвертируется в целое число (long int). Этот
процесс останавливается, если в строке встречается некорректное значение
(например, не соответствующая системе исчисления цифра). Символ `A' в
верхнем или нижнем регистре означает 10, `B' означает 11 и так далее
(до `Z', означающей 35).
Если значение endptr - не NULL, то strtol() записывает адрес
первого некорректного значения в *endptr. Если в строке вообще нет
цифр, то strtol() сохраняет начальное значение nptr в
*endptr (и возвращает 0).
В частности, если *nptr не равно `\0', а **endptr
равно `\0' по возвращении, то вся строка состоит из корректных символов.
Функция
strtoll()
работает так же, как и
strtol(),
но возвращает значение типа long long int.
ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ
Функция strtol() возвращает результат преобразования, если
значение не вызвало "переполнения" или не было крайне маленьким. Если
происходит последнее, то strtol() возвращает LONG_MIN. Если же
произошло "переполнение", то strtol() возвращает LONG_MAX. В
обоих случаях глобальной переменной errno присваивается значение
ERANGE.
То же самое относится к функции
strtoll()
(только вместо LONG_MIN и LONG_MAX возвращаются значения LLONG_MIN и
LLONG_MAX).
НАЙДЕННЫЕ ОШИБКИ
ERANGE
данная строка не входит в обрабатываемый диапазон чисел.
EINVAL
(не включено в C99)
Аргумент
base
содержит неподдерживаемое значение.
Некоторые реализации могут также устанавливать errno в EINVAL
в случае, когда преобразование не было выполнено (не было встречено цифр
и возвращен 0).
ЗАМЕЧАНИЯ
В локалях, отличных от локали "C", могут приниматься и другие строки.
СООТВЕТСТВИЕ СТАНДАРТАМ
Функция
strtol()
соответствует SVID 3, BSD 4.3, ISO 9899 (C99) и POSIX,
а функция
strtoll()
соответсвует ISO 9899 (C99) и POSIX-2001.