xref: /illumos-gate/usr/src/man/man9f/sprintf.9f (revision c3b39789)
1.\"
2.\" The contents of this file are subject to the terms of the
3.\" Common Development and Distribution License (the "License").
4.\" You may not use this file except in compliance with the License.
5.\"
6.\" You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
7.\" or http://www.opensolaris.org/os/licensing.
8.\" See the License for the specific language governing permissions
9.\" and limitations under the License.
10.\"
11.\" When distributing Covered Code, include this CDDL HEADER in each
12.\" file and include the License file at usr/src/OPENSOLARIS.LICENSE.
13.\" If applicable, add the following below this CDDL HEADER, with the
14.\" fields enclosed by brackets "[]" replaced with your own identifying
15.\" information: Portions Copyright [yyyy] [name of copyright owner]
16.\"
17.\"
18.\" Copyright 1989 AT&T
19.\" Copyright (c) 2006, Sun Microsystems, Inc. All Rights Reserved.
20.\" Copyright 2016 Nexenta Systems, Inc.
21.\"
22.Dd Oct 20, 2023
23.Dt SPRINTF 9F
24.Os
25.Sh NAME
26.Nm sprintf, snprintf, vsprintf, vsnprintf
27.Nd format characters in memory
28.Sh SYNOPSIS
29.In sys/cmn_err.h
30.In sys/ddi.h
31.In sys/sunddi.h
32.Ft "char *"
33.Fo sprintf
34.Fa "char *s"
35.Fa "const char *format"
36.Fa ...
37.Fc
38.Ft size_t
39.Fo snprintf
40.Fa "char *s"
41.Fa "size_t n"
42.Fa "const char *format"
43.Fa ...
44.Fc
45.In sys/varargs.h
46.Ft "char *"
47.Fo vsprintf
48.Fa "char *s"
49.Fa "const char *format"
50.Fa "va_list ap"
51.Fc
52.Ft size_t
53.Fo vsnprintf
54.Fa "char *s"
55.Fa "size_t n"
56.Fa "const char *format"
57.Fa "va_list ap"
58.Fc
59.Sh INTERFACE LEVEL
60illumos DDI specific
61.Sh PARAMETERS
62.Bl -tag -width Ds
63.It Fa s
64Pointer to a character string.
65.It Fa n
66Size of the buffer pointed to by
67.Fa s .
68.It Fa format
69Pointer to a character string.
70.It Fa ap
71Pointer to a variable argument list.
72.El
73.Sh DESCRIPTION
74The
75.Fn sprintf
76function places output, followed by the null byte
77.Pq \e0 ,
78in consecutive bytes starting at
79.Fa s ;
80it is the user's responsibility to ensure that enough storage is available.
81.Pp
82The
83.Fn snprintf
84function is identical to
85.Fn sprintf
86with the addition of the argument
87.Fa n ,
88which specifies the size of the buffer referred to by
89.Fa s .
90If
91.Fa n
92is 0, nothing is written and
93.Fa s
94can be a null pointer.
95Otherwise, output bytes beyond the
96.Fa n Ns \-1st
97are discarded instead of being written to the array and a null byte is written
98at the end of the bytes actually written into the array.
99.Pp
100The
101.Fn vsprintf
102and
103.Fn vsnprintf
104functions are the same as
105.Fn sprintf
106and
107.Fn snprintf ,
108respectively, except that instead of being called with a variable number of
109arguments, they are called with an argument list,
110.Fa ap ,
111used by the conversion specifications in
112.Fa format .
113.Fa ap
114is a variable argument list and must be initialized by calling
115.Xr va_start 9F .
116.Xr va_end 9F
117is used to clean up and must be called after each traversal of the list.
118Multiple traversals of the argument list, each bracketed by
119.Xr va_start 9F
120and
121.Xr va_end 9F ,
122are possible.
123.Pp
124Each of these functions converts, formats, and prints its arguments under
125control of the
126.Fa format .
127The
128.Fa format
129is composed of zero or more directives: ordinary characters, which are simply
130copied to the output stream and conversion specifications, each of which results
131in the fetching of zero or more arguments.
132The results are undefined if there are insufficient arguments for the
133.Fa format .
134If the
135.Fa format
136is exhausted while arguments remain, the excess arguments are evaluated but are
137otherwise ignored.
138.Ss Conversion Specifications
139Each conversion specification is introduced by the
140.Qq Sy %
141character after which the following appear in sequence:
142.Bl -bullet
143.It
144Zero or more flags
145.Pq in any order ,
146which modify the meaning of the conversion specification.
147.It
148An optional minimum field width.
149If the converted value has fewer bytes than the field width, it will be padded
150with spaces by default on the left; it will be padded on the right, if the
151left-adjustment flag
152.Pq Qq Sy ‐ ,
153described below, is given to the field width.
154The field width takes the form of an asterisk
155.Pq Qq Sy * ,
156described below, or a decimal integer.
157.It
158An optional precision that gives the minimum number of digits to appear for the
159.Sy d , D , o , O , x , X ,
160or
161.Sy u
162conversions
163.Pq the field is padded with leading zeros ;
164or the maximum number of bytes to be printed from a string in s conversion.
165The precision takes the form of a period
166.Pq Qq Sy \&.
167followed either by an asterisk
168.Pq Qq Sy * ,
169described below, or an optional decimal digit string, where a null digit string
170is treated as 0.
171If a precision appears with any other conversion specifier, the behavior is
172undefined.
173.It
174An optional length modifier that specified the size of the argument.
175.It
176A conversion specifier that indicates the type of conversion to be applied.
177.El
178.Pp
179A field width, or precision, or both can be indicated by an asterisk
180.Pq Qq Sy * .
181In this case, an argument of type int supplies the field width or precision.
182Arguments specifying field width, or precision, or both must appear in that
183order before the argument, if any, to be converted.
184A negative field width is taken as a
185.Qq Sy \-
186flag followed by a positive field width.
187A negative precision is taken as if the precision were omitted.
188.Ss Flag Characters
189The flag characters and their meanings are:
190.Bl -tag -width Ds
191.It Sy \-
192The result of the conversion will be left-justified within the field.
193The conversion will be right-justified if this flag is not specified.
194.It Sy 0
195For
196.Sy d , D , o , O , x , X ,
197or
198.Sy u
199conversions, leading zeros
200.Pq following any indication of sign or base
201are used to pad to the field width; no space padding is performed.
202If the
203.Sy 0
204and
205.Sy \-
206flags both appear, the
207.Sy 0
208flag will be ignored.
209If a precision is specified, the
210.Sy 0
211flag will be ignored.
212For other conversions, the behavior is undefined.
213.El
214.Ss Length Modifiers
215The length modifiers and their meanings are:
216.Bl -tag -width Ds
217.It Sy h
218Specifies that a following
219.Sy d , D , o , O , x , X ,
220or
221.Sy u
222conversion specifier applies to a short or unsigned
223short argument
224.Po the argument will have been promoted according to the integer promotions,
225but its value will be converted to short or unsigned short before printing
226.Pc .
227.It Sy hh
228Specifies that a following
229.Sy d , D , o , O , x , X ,
230or
231.Sy u
232conversion specifier applies to a signed char or unsigned char argument
233.Po the argument will have been promoted according to the integer promotions,
234but its value will be converted to signed char or unsigned char before printing
235.Pc .
236.It Sy l
237Specifies that a following
238.Sy d , D , o , O , x , X ,
239or
240.Sy u
241conversion specifier applies to a long or unsigned long argument.
242.It Sy ll
243Specifies that a following
244.Sy d , D , o , O , x , X ,
245or
246.Sy u
247conversion specifier applies to a long long or unsigned long long argument.
248.El
249.Ss Conversion Specifiers
250Each conversion specifier results in fetching zero or more arguments.
251The results are undefined if there are insufficient arguments for the
252.Fa format .
253If the
254.Fa format
255is exhausted while arguments remain, the excess arguments are ignored.
256.Pp
257The conversion specifiers and their meanings are:
258.Bl -tag -width Ds
259.It Sy d , D , o , O , x , X , u
260The integer argument is converted to signed decimal
261.Pq Sy d , D ,
262unsigned octal
263.Pq Sy o , O ,
264unsigned hexadecimal
265.Pq Sy x , X ,
266or unsigned decimal
267.Pq Sy u ,
268respectively.
269The letters
270.Qq Sy abcdef
271are used for
272.Sy x
273and letters
274.Qq Sy ABCDEF
275for
276.Sy X
277conversions.
278.It Sy c
279The character value of the argument is printed.
280.It Sy b
281The
282.Sy %b
283conversion specification allows bit values to be printed meaningfully.
284Each
285.Sy %b
286takes an integer value and a format string from the argument list.
287The first character of the format string should be the output base encoded as a
288control character.
289This base is used to print the integer argument.
290The remaining groups of characters in the format string consist of a bit number
291.Pq between 1 and 32, also encoded as a control character ,
292and the next characters
293.Pq up to the next control character, or space, or '\e0'
294give the name of the bit.
295As the bit number 32 encoded as a control character is the same as a space
296character, the names of the bits cannot contain a space.
297The strings corresponding to the bits set in the integer argument are printed
298after the numerical value, enclosed in angle brackets and separated by commata.
299.It Sy p
300The argument is taken to be a pointer; the value of the pointer is printed in
301unsigned hexadecimal.
302The print format is equivalent to
303.Sy %lx .
304To avoid lint warnings, cast pointers to type
305.Ft "void *"
306when using the
307.Sy %p
308format specifier.
309.It Sy s
310The argument is taken to be a string
311.Pq character pointer ,
312and characters from the string are printed until a null character is ecountered.
313If the character pointer is
314.Sy NULL ,
315the string
316.Qq <null string>
317is used in its place.
318.It Sy %
319Copy a
320.Sy % ;
321no argument is converted.
322.El
323.Sh CONTEXT
324These functions can be called from user, kernel, interrupt, or
325high-level interrupt context.
326.Sh RETURN VALUES
327.Fn sprintf
328and
329.Fn vsprintf
330return
331.Fa s .
332.Pp
333.Fn snprintf
334and
335.Fn vsnprintf
336return the number of bytes that would have been written to
337.Fa s
338if
339.Fa n
340had been sufficiently large
341.Pq excluding the terminating null byte .
342.Sh SEE ALSO
343.Xr cmn_err 9F ,
344.Xr va_arg 9F ,
345.Xr va_end 9F ,
346.Xr va_start 9F
347