xref: /freebsd/lib/libc/stdlib/strtoul.3 (revision 315ee00f)
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.\"     @(#)strtoul.3	8.1 (Berkeley) 6/4/93
33.\"
34.Dd November 28, 2001
35.Dt STRTOUL 3
36.Os
37.Sh NAME
38.Nm strtoul , strtoull , strtoumax , strtouq
39.Nd "convert a string to an"
40.Vt "unsigned long" , "unsigned long long" , uintmax_t ,
41or
42.Vt u_quad_t
43integer
44.Sh LIBRARY
45.Lb libc
46.Sh SYNOPSIS
47.In stdlib.h
48.In limits.h
49.Ft "unsigned long"
50.Fn strtoul "const char * restrict nptr" "char ** restrict endptr" "int base"
51.Ft "unsigned long long"
52.Fn strtoull "const char * restrict nptr" "char ** restrict endptr" "int base"
53.In inttypes.h
54.Ft uintmax_t
55.Fn strtoumax "const char * restrict nptr" "char ** restrict endptr" "int base"
56.In sys/types.h
57.In stdlib.h
58.In limits.h
59.Ft u_quad_t
60.Fn strtouq "const char *nptr" "char **endptr" "int base"
61.Sh DESCRIPTION
62The
63.Fn strtoul
64function
65converts the string in
66.Fa nptr
67to an
68.Vt "unsigned long"
69value.
70The
71.Fn strtoull
72function
73converts the string in
74.Fa nptr
75to an
76.Vt "unsigned long long"
77value.
78The
79.Fn strtoumax
80function
81converts the string in
82.Fa nptr
83to an
84.Vt uintmax_t
85value.
86The
87.Fn strtouq
88function
89converts the string in
90.Fa nptr
91to a
92.Vt u_quad_t
93value.
94The conversion is done according to the given
95.Fa base ,
96which must be between 2 and 36 inclusive,
97or be the special value 0.
98.Pp
99The string may begin with an arbitrary amount of white space
100(as determined by
101.Xr isspace 3 )
102followed by a single optional
103.Ql +
104or
105.Ql -
106sign.
107If
108.Fa base
109is zero or 16,
110the string may then 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