\" $NetBSD: strtoi.3,v 1.11 2024/07/24 08:55:08 kre Exp $
\"
\" Copyright (c) 1990, 1991, 1993
\" The Regents of the University of California. All rights reserved.
\"
\" This code is derived from software contributed to Berkeley by
\" Chris Torek and the American National Standards Committee X3,
\" on Information Processing Systems.
\"
\" Redistribution and use in source and binary forms, with or without
\" modification, are permitted provided that the following conditions
\" are met:
\" 1. Redistributions of source code must retain the above copyright
\" notice, this list of conditions and the following disclaimer.
\" 2. Redistributions in binary form must reproduce the above copyright
\" notice, this list of conditions and the following disclaimer in the
\" documentation and/or other materials provided with the distribution.
\" 3. Neither the name of the University nor the names of its contributors
\" may be used to endorse or promote products derived from this software
\" without specific prior written permission.
\"
\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
\" SUCH DAMAGE.
\"
\" from: @(#)strtol.3 8.1 (Berkeley) 6/4/93
\"
\" Created by Kamil Rytarowski, based on ID:
\" NetBSD: strtol.3,v 1.31 2015/03/11 09:57:35 wiz Exp
\"
Dd July 24, 2024
Dt STRTOI 3
Os
Sh NAME
Nm strtoi ,
Nm strtoi_l
Nd convert a string value to an intmax_t integer
Sh LIBRARY
Lb libc
Sh SYNOPSIS
In inttypes.h
Ft intmax_t
Fo strtoi
Fa "const char * restrict nptr"
Fa "char ** restrict endptr"
Fa "int base"
Fa "intmax_t lo"
Fa "intmax_t hi"
Fa "int *rstatus"
Fc
In locale.h
Ft intmax_t
Fo strtoi_l
Fa "const char * restrict nptr"
Fa "char ** restrict endptr"
Fa "int base"
Fa "intmax_t lo"
Fa "intmax_t hi"
Fa "int *rstatus"
Fa "locale_t loc"
Fc
Sh DESCRIPTION
The
Fn strtoi
generates the
Ft intmax_t
result value equivalent to the numeric string in
Fa nptr .
The
Fn strtoi
function internally uses
Xr strtoimax 3
and then ensures that the result is in the range
Bq Fa lo No .. Fa hi .
In addition it places
a conversion status indicator,
Dv 0
if fully successful,
in the integer addressed by the
Fa rstatus
argument, if that is not NULL, allowing the
Dv errno
gymnastics that other similar functions require to be avoided.
The
Fa rstatus
argument can be
Dv NULL
if the conversion status is to be ignored.
Pp
The operation of
Fn strtoi
is unspecified if
Fa lo
is greater than
Fa hi .
Pp
The string may begin with an arbitrary amount of white space
(as determined by
Xr isspace 3 )
followed by a single optional
Ql +
or
Ql -
sign.
If
Fa base
is zero or 16,
the string may then include a
Ql 0x
or
Ql 0X
prefix,
after which there must immediately follow at least one hexadecimal digit,
and the number will be read in base 16; otherwise,
\" if the
\" .Fa base
\" is zero or 2,
\" the string may then include a
\" .Ql 0b
\" or
\" .Ql 0B
\" prefix,
\" and the number will be read in base 2; otherwise,
a zero
Fa base
is taken as 10 (decimal) unless the next character is
Ql 0 ,
in which case it is taken as 8 (octal).
Pp
The remainder of the string is converted to the
Em intmax_t
result in the obvious manner,
stopping at the end of the string
or at the first character which is not a valid digit
in the given base.
(In bases above 10, the letter
Ql A
in either upper or lower case
represents 10,
Ql B
represents 11, and so forth, with
Ql Z
representing 35.)
Pp
If
Fa endptr
is not NULL,
Fn strtoi
stores the address of the first character after those
which were converted in
Fa *endptr .
If there were no digits at all, however,
or if the
Fa base
is invalid,
Fn strtoi
stores the original value of
Fa nptr
in
Fa *endptr .
(Thus, if
Fa *nptr
is not
Ql \e0
but
Fa **endptr
is
Ql \e0
on return, the entire string was valid.)
Note that converting an out of range value has no
impact upon the value placed into
Fa *endptr .
Pp
The
Fn strtoi_l
function is identical, except uses the locale given by
Fa loc
rather than the current locale, when determining what is white space to
be skipped before the conversion begins.
Sh RETURN VALUES
The
Fn strtoi
function,
returns the converted value,
or the closest value in the range specified by the
Fa lo
and
Fa hi
arguments, if the value converted was outside that range.
If
Fa lo
is equal to
Fa hi
and no overriding error occurs,
that value will always be returned.
Pp
The
Va errno
value from
In errno.h ,
is guaranteed to be left unchanged.
Pp
Errors are stored as the conversion status error indicator,
taken from a subset of the values from
In errno.h
in the
Fa rstatus
argument, if that was not given as a NULL pointer.
See the ERRORS section below for the possible values.
Sh EXAMPLES
The following example will always return a number in
Dv [1..99]
range no matter what the input is, and warn if the conversion failed.
Bd -literal -offset indent
int e;
intmax_t lval = strtoi(buf, NULL, 0, 1, 99, &e);
if (e)
warnc(e, "conversion of `%s' to a number failed, using %jd",
buf, lval);
Ed
Sh ERRORS
Bl -tag -width Er
It Bq Er ECANCELED
The string did not contain any characters that were converted.
If given
Fa endptr
will be set to
Fa nptr .
It Bq Er EINVAL
The
Ar base
is not between 2 and 36 and nor is it the special value 0.
If given
Fa endptr
will be set to
Fa nptr .
It Bq Er ENOTSUP
The string contained non-numeric characters that did not get converted.
In this case,
Fa endptr
points to the first unconverted character.
It Bq Er ERANGE
The given string was out of range; the value converted has been clamped.
In this case,
Fa endptr
points to the terminating
Sq \e0
if the
Fa nptr
string was fully converted, or to the first unconverted character otherwise.
El
Pp
The validity of the provided base is checked first, and if that
fails, no further processing is attempted.
The range check is more important than the unconverted characters check,
and is given priority.
If a program needs to know if there were unconverted characters when an
out of range number has been provided, it needs to supply and test
Fa endptr.
Sh SEE ALSO
Xr atof 3 ,
Xr atoi 3 ,
Xr atol 3 ,
Xr atoll 3 ,
Xr strtod 3 ,
Xr strtou 3 ,
Xr strtoimax 3 ,
Xr strtol 3 ,
Xr strtoll 3 ,
Xr strtoul 3 ,
Xr strtoull 3 ,
Xr warnc 3
Sh STANDARDS
The
Fn strtoi
and
Fn strtoi_l
functions are a
Nx
extension.
Sh HISTORY
The
Fn strtoi
function first appeared in
Nx 7 .
Ox
introduced the
Fn strtonum 3
function for the same purpose, but its interface makes it impossible to
properly differentiate error conditions.
Sh BUGS
Ignores the current locale while doing the numeric conversion, only
ASCII letters and digits are allowed, and no grouping characters.