## NAME

strtoul - convert a string to an unsigned long integer.

## SYNOPSIS

**#include** **<stdlib.h>**
**unsigned** **long** **int** **strtoul(const** **char** ******nptr***,** **char** *******endptr***,**
**int** base**)**

## DESCRIPTION

The **strtoul()** function converts the string in *nptr* to an
unsigned long integer value according to the given *base*,
which must be between 2 and 36 inclusive, or be the special
value 0.
The string must begin with an arbitrary amount of white
space (as determined by **isspace**(3)) 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 an unsigned long
int value in the obvious manner, stopping at the first char-
acter 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, **strtoul()** stores the address of the
first invalid character in **endptr*. If there were no digits
at all, **strtoul()** stores the original value of *nptr* in
**endptr*. (Thus, if **nptr* is not `\0' but ***endptr* is `\0'
on return, the entire string is valid.)

## RETURN VALUE

The **strtoul()** function returns either the result of the
conversion or, if there was a leading minus sign, the nega-
tion of the result of the conversion, unless the original
(non-negated) value would overflow; in the latter case,
**strtoul()** returns ULONG_MAX and sets the global variable
*errno* to ERANGE.

## ERRORS

**ERANGE**
The given string was out of range; the value converted
has been clamped.

## CONFORMING TO

SVID 3, BSD 4.3, ISO 9899

## SEE ALSO

**atof**(3), **atoi**(3), **atol**(3),

## BUGS

Ignores the current locale.