`long strtol(const char *__nptr, char **__endptr, int __base)`

The strtol() function converts the string in
`nptr`

to a long value. The conversion is done
according to the given base, which must be between 2 and 36 inclusive, or be the special
value 0.

The string may begin with an arbitrary amount of white space (as determined by isspace()) followed by a single optional `'+'`

or `'-'`

sign. If `base`

is zero or 16, the string may then include a `"0x"`

prefix, and the number will be read in base 16; otherwise, a zero base is taken as 10
(decimal) unless the next character is `'0'`

, in which
case it is taken as 8 (octal).

The remainder of the string is converted to a long value in the obvious manner,
stopping at the first character which is not a valid digit in the given base. (In bases
above 10, the letter `'A'`

in either upper or lower case
represents 10, `'B'`

represents 11, and so forth, with
`'Z'`

representing 35.)

If `endptr`

is not NULL, strtol() stores the address of the first invalid character in
`*endptr`

. If there were no digits at all, however,
strtol() stores the original value of `nptr`

in
`endptr`

. (Thus, if
`*nptr`

is not `'\0'`

but `**endptr`

is `'\0'`

on return, the entire string was valid.)

The strtol() function returns the result of the conversion, unless
the value would underflow or overflow. If no conversion could be performed, 0 is
returned. If an overflow or underflow occurs, `errno`

is
set to ERANGE and the function
return value is clamped to `LONG_MIN`

or
`LONG_MAX`

, respectively.