`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.