Section: Linux Programmer's Manual (3)
strtoul, strtoull, strtouq - convert a string to an unsigned long integer
unsigned long strtoul(const char *nptr, char **endptr, int base);
unsigned long long strtoull(const char *nptr, char **endptr,
Feature Test Macro Requirements for glibc (see
|| /* Glibc versions <= 2.19: */ _SVID_SOURCE || _BSD_SOURCE
function converts the initial part of the string
value according to the
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
followed by a single optional '+' or '-'
is zero or 16, the string may then include a
"0x" prefix, and the number will be read in base 16; otherwise, a
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
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 uppercase or lowercase represents 10, 'B' represents 11, and so
forth, with 'Z' representing 35.)
is not NULL,
stores the address of the
first invalid character in
If there were no digits at
stores the original value of
(and returns 0).
In particular, if
is not '\0' but
is '\0' on return, the entire string is valid.
function works just like the
function but returns an
unsigned long long
function returns either the result of the conversion
or, if there was a leading minus sign, the negation of the result of the
conversion represented as an unsigned value,
unless the original (nonnegated) value would overflow; in
the latter case,
Precisely the same holds for
(not in C99)
contains an unsupported value.
The resulting value was out of range.
The implementation may also set
no conversion was performed (no digits seen, and 0 returned).
For an explanation of the terms used in this section, see
||Thread safety||MT-Safe locale|
POSIX.1-2001, POSIX.1-2008, C89, C99 SVr4.
POSIX.1-2001, POSIX.1-2008, C99.
can legitimately return 0 or
on both success and failure, the calling program should set
to 0 before the call,
and then determine if an error occurred by checking whether
has a nonzero value after the call.
In locales other than the "C" locale, other strings may be accepted.
(For example, the thousands separator of the current locale may be
BSD also has
u_quad_t strtouq(const char *nptr, char **endptr, int base);
with completely analogous definition.
Depending on the wordsize of the current architecture, this
may be equivalent to
Negative values are considered valid input and are
silently converted to the equivalent
See the example on the
the use of the functions described in this manual page is similar.
This page is part of release 5.10 of the Linux
A description of the project,
information about reporting bugs,
and the latest version of this page,
can be found at