xref: /freebsd/lib/libc/stdlib/strtoul.3 (revision 2e3507c25e42292b45a5482e116d278f5515d04d)
1.\" Copyright (c) 1990, 1991, 1993
2.\"	The Regents of the University of California.  All rights reserved.
3.\"
4.\" This code is derived from software contributed to Berkeley by
5.\" Chris Torek and the American National Standards Committee X3,
6.\" on Information Processing Systems.
7.\"
8.\" Redistribution and use in source and binary forms, with or without
9.\" modification, are permitted provided that the following conditions
10.\" are met:
11.\" 1. Redistributions of source code must retain the above copyright
12.\"    notice, this list of conditions and the following disclaimer.
13.\" 2. Redistributions in binary form must reproduce the above copyright
14.\"    notice, this list of conditions and the following disclaimer in the
15.\"    documentation and/or other materials provided with the distribution.
16.\" 3. Neither the name of the University nor the names of its contributors
17.\"    may be used to endorse or promote products derived from this software
18.\"    without specific prior written permission.
19.\"
20.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
21.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
24.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30.\" SUCH DAMAGE.
31.\"
32.Dd August 21, 2023
33.Dt STRTOUL 3
34.Os
35.Sh NAME
36.Nm strtoul , strtoull , strtoumax , strtouq
37.Nd "convert a string to an"
38.Vt "unsigned long" , "unsigned long long" , uintmax_t ,
39or
40.Vt u_quad_t
41integer
42.Sh LIBRARY
43.Lb libc
44.Sh SYNOPSIS
45.In stdlib.h
46.In limits.h
47.Ft "unsigned long"
48.Fn strtoul "const char * restrict nptr" "char ** restrict endptr" "int base"
49.Ft "unsigned long long"
50.Fn strtoull "const char * restrict nptr" "char ** restrict endptr" "int base"
51.In inttypes.h
52.Ft uintmax_t
53.Fn strtoumax "const char * restrict nptr" "char ** restrict endptr" "int base"
54.In sys/types.h
55.In stdlib.h
56.In limits.h
57.Ft u_quad_t
58.Fn strtouq "const char *nptr" "char **endptr" "int base"
59.Sh DESCRIPTION
60The
61.Fn strtoul
62function
63converts the string in
64.Fa nptr
65to an
66.Vt "unsigned long"
67value.
68The
69.Fn strtoull
70function
71converts the string in
72.Fa nptr
73to an
74.Vt "unsigned long long"
75value.
76The
77.Fn strtoumax
78function
79converts the string in
80.Fa nptr
81to an
82.Vt uintmax_t
83value.
84The
85.Fn strtouq
86function
87converts the string in
88.Fa nptr
89to a
90.Vt u_quad_t
91value.
92The conversion is done according to the given
93.Fa base ,
94which must be between 2 and 36 inclusive,
95or be the special value 0.
96.Pp
97The string may begin with an arbitrary amount of white space
98(as determined by
99.Xr isspace 3 )
100followed by a single optional
101.Ql +
102or
103.Ql -
104sign.
105If
106.Fa base
107is zero or 16,
108the string may then include a
109.Dq Li 0b
110prefix, and the number will be read in base 2; or it may include a
111.Dq Li 0x
112prefix,
113and the number will be read in base 16; otherwise, a zero
114.Fa base
115is taken as 10 (decimal) unless the next character is
116.Ql 0 ,
117in which case it is taken as 8 (octal).
118.Pp
119The remainder of the string is converted to an
120.Vt "unsigned long"
121value in the obvious manner,
122stopping at the end of the string
123or at the first character that does not produce a valid digit
124in the given base.
125(In bases above 10, the letter
126.Ql A
127in either upper or lower case
128represents 10,
129.Ql B
130represents 11, and so forth, with
131.Ql Z
132representing 35.)
133.Pp
134If
135.Fa endptr
136is not
137.Dv NULL ,
138.Fn strtoul
139stores the address of the first invalid character in
140.Fa *endptr .
141If there were no digits at all, however,
142.Fn strtoul
143stores the original value of
144.Fa nptr
145in
146.Fa *endptr .
147(Thus, if
148.Fa *nptr
149is not
150.Ql \e0
151but
152.Fa **endptr
153is
154.Ql \e0
155on return, the entire string was valid.)
156.Sh RETURN VALUES
157The
158.Fn strtoul ,
159.Fn strtoull ,
160.Fn strtoumax
161and
162.Fn strtouq
163functions
164return either the result of the conversion
165or, if there was a leading minus sign,
166the negation of the result of the conversion,
167unless the original (non-negated) value would overflow;
168in the latter case,
169.Fn strtoul
170returns
171.Dv ULONG_MAX ,
172.Fn strtoull
173returns
174.Dv ULLONG_MAX ,
175.Fn strtoumax
176returns
177.Dv UINTMAX_MAX ,
178and
179.Fn strtouq
180returns
181.Dv ULLONG_MAX .
182In all cases,
183.Va errno
184is set to
185.Er ERANGE .
186If no conversion could be performed, 0 is returned and
187the global variable
188.Va errno
189is set to
190.Er EINVAL
191(the last feature is not portable across all platforms).
192.Sh ERRORS
193.Bl -tag -width Er
194.It Bq Er EINVAL
195The value of
196.Fa base
197is not supported or
198no conversion could be performed
199(the last feature is not portable across all platforms).
200.It Bq Er ERANGE
201The given string was out of range; the value converted has been clamped.
202.El
203.Sh SEE ALSO
204.Xr strtol 3 ,
205.Xr strtonum 3 ,
206.Xr wcstoul 3
207.Sh STANDARDS
208The
209.Fn strtoul
210function
211conforms to
212.St -isoC .
213The
214.Fn strtoull
215and
216.Fn strtoumax
217functions
218conform to
219.St -isoC-99 .
220The
221.Bx
222.Fn strtouq
223function is deprecated.
224