]>
Commit | Line | Data |
---|---|---|
5b2abdfb A |
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. | |
5b2abdfb A |
16 | .\" 4. 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 | .\" @(#)printf.3 8.1 (Berkeley) 6/4/93 | |
1f2f436a | 33 | .\" $FreeBSD: src/lib/libc/stdio/printf.3,v 1.64 2009/12/02 07:51:25 brueffer Exp $ |
5b2abdfb | 34 | .\" |
1f2f436a | 35 | .Dd December 2, 2009 |
5b2abdfb A |
36 | .Dt PRINTF 3 |
37 | .Os | |
38 | .Sh NAME | |
1f2f436a A |
39 | .Nm printf , fprintf , sprintf , snprintf , asprintf , dprintf , |
40 | .Nm vprintf , vfprintf, vsprintf , vsnprintf , vasprintf, vdprintf | |
5b2abdfb A |
41 | .Nd formatted output conversion |
42 | .Sh LIBRARY | |
43 | .Lb libc | |
44 | .Sh SYNOPSIS | |
45 | .In stdio.h | |
46 | .Ft int | |
9385eb3d | 47 | .Fn printf "const char * restrict format" ... |
5b2abdfb | 48 | .Ft int |
9385eb3d | 49 | .Fn fprintf "FILE * restrict stream" "const char * restrict format" ... |
5b2abdfb | 50 | .Ft int |
9385eb3d | 51 | .Fn sprintf "char * restrict str" "const char * restrict format" ... |
5b2abdfb | 52 | .Ft int |
9385eb3d | 53 | .Fn snprintf "char * restrict str" "size_t size" "const char * restrict format" ... |
5b2abdfb A |
54 | .Ft int |
55 | .Fn asprintf "char **ret" "const char *format" ... | |
1f2f436a A |
56 | .Ft int |
57 | .Fn dprintf "int fd" "const char * restrict format" ... | |
5b2abdfb A |
58 | .In stdarg.h |
59 | .Ft int | |
9385eb3d | 60 | .Fn vprintf "const char * restrict format" "va_list ap" |
5b2abdfb | 61 | .Ft int |
9385eb3d | 62 | .Fn vfprintf "FILE * restrict stream" "const char * restrict format" "va_list ap" |
5b2abdfb | 63 | .Ft int |
9385eb3d | 64 | .Fn vsprintf "char * restrict str" "const char * restrict format" "va_list ap" |
5b2abdfb | 65 | .Ft int |
9385eb3d | 66 | .Fn vsnprintf "char * restrict str" "size_t size" "const char * restrict format" "va_list ap" |
5b2abdfb A |
67 | .Ft int |
68 | .Fn vasprintf "char **ret" "const char *format" "va_list ap" | |
1f2f436a A |
69 | .Ft int |
70 | .Fn vdprintf "int fd" "const char * restrict format" "va_list ap" | |
5b2abdfb A |
71 | .Sh DESCRIPTION |
72 | The | |
73 | .Fn printf | |
74 | family of functions produces output according to a | |
75 | .Fa format | |
76 | as described below. | |
9385eb3d A |
77 | The |
78 | .Fn printf | |
5b2abdfb A |
79 | and |
80 | .Fn vprintf | |
9385eb3d | 81 | functions |
5b2abdfb | 82 | write output to |
9385eb3d | 83 | .Dv stdout , |
5b2abdfb A |
84 | the standard output stream; |
85 | .Fn fprintf | |
86 | and | |
87 | .Fn vfprintf | |
88 | write output to the given output | |
89 | .Fa stream ; | |
1f2f436a A |
90 | .Fn dprintf |
91 | and | |
92 | .Fn vdprintf | |
93 | write output to the given file descriptor; | |
5b2abdfb A |
94 | .Fn sprintf , |
95 | .Fn snprintf , | |
96 | .Fn vsprintf , | |
97 | and | |
98 | .Fn vsnprintf | |
99 | write to the character string | |
ad3c9f2a | 100 | .Fa s ; |
5b2abdfb A |
101 | and |
102 | .Fn asprintf | |
103 | and | |
104 | .Fn vasprintf | |
105 | dynamically allocate a new string with | |
106 | .Xr malloc 3 . | |
107 | .Pp | |
ad3c9f2a A |
108 | Extended locale versions of these functions are documented in |
109 | .Xr printf_l 3 . | |
110 | See | |
111 | .Xr xlocale 3 | |
112 | for more information. | |
113 | .Pp | |
5b2abdfb A |
114 | These functions write the output under the control of a |
115 | .Fa format | |
116 | string that specifies how subsequent arguments | |
117 | (or arguments accessed via the variable-length argument facilities of | |
118 | .Xr stdarg 3 ) | |
119 | are converted for output. | |
120 | .Pp | |
121 | These functions return the number of characters printed | |
122 | (not including the trailing | |
123 | .Ql \e0 | |
9385eb3d | 124 | used to end output to strings) or a negative value if an output error occurs, |
5b2abdfb A |
125 | except for |
126 | .Fn snprintf | |
127 | and | |
128 | .Fn vsnprintf , | |
129 | which return the number of characters that would have been printed if the | |
ad3c9f2a | 130 | .Fa n |
5b2abdfb A |
131 | were unlimited |
132 | (again, not including the final | |
133 | .Ql \e0 ) . | |
134 | .Pp | |
9385eb3d A |
135 | The |
136 | .Fn asprintf | |
5b2abdfb A |
137 | and |
138 | .Fn vasprintf | |
9385eb3d | 139 | functions |
5b2abdfb A |
140 | set |
141 | .Fa *ret | |
142 | to be a pointer to a buffer sufficiently large to hold the formatted string. | |
143 | This pointer should be passed to | |
144 | .Xr free 3 | |
145 | to release the allocated storage when it is no longer needed. | |
146 | If sufficient space cannot be allocated, | |
147 | .Fn asprintf | |
148 | and | |
149 | .Fn vasprintf | |
9385eb3d | 150 | will return \-1 and set |
5b2abdfb A |
151 | .Fa ret |
152 | to be a | |
153 | .Dv NULL | |
154 | pointer. | |
155 | .Pp | |
9385eb3d A |
156 | The |
157 | .Fn snprintf | |
5b2abdfb A |
158 | and |
159 | .Fn vsnprintf | |
9385eb3d | 160 | functions |
5b2abdfb | 161 | will write at most |
ad3c9f2a | 162 | .Fa n Ns \-1 |
5b2abdfb A |
163 | of the characters printed into the output string |
164 | (the | |
ad3c9f2a | 165 | .Fa n Ns \'th |
5b2abdfb A |
166 | character then gets the terminating |
167 | .Ql \e0 ) ; | |
168 | if the return value is greater than or equal to the | |
ad3c9f2a | 169 | .Fa n |
5b2abdfb A |
170 | argument, the string was too short |
171 | and some of the printed characters were discarded. | |
9385eb3d | 172 | The output is always null-terminated. |
5b2abdfb | 173 | .Pp |
9385eb3d A |
174 | The |
175 | .Fn sprintf | |
5b2abdfb A |
176 | and |
177 | .Fn vsprintf | |
9385eb3d | 178 | functions |
5b2abdfb | 179 | effectively assume an infinite |
ad3c9f2a A |
180 | .Fa n . |
181 | .Pp | |
182 | For those routines that write to a user-provided character string, | |
183 | that string and the format strings should not overlap, as the | |
184 | behavior is undefined. | |
5b2abdfb A |
185 | .Pp |
186 | The format string is composed of zero or more directives: | |
187 | ordinary | |
188 | .\" multibyte | |
189 | characters (not | |
190 | .Cm % ) , | |
191 | which are copied unchanged to the output stream; | |
192 | and conversion specifications, each of which results | |
193 | in fetching zero or more subsequent arguments. | |
194 | Each conversion specification is introduced by | |
195 | the | |
196 | .Cm % | |
197 | character. | |
198 | The arguments must correspond properly (after type promotion) | |
199 | with the conversion specifier. | |
200 | After the | |
201 | .Cm % , | |
202 | the following appear in sequence: | |
203 | .Bl -bullet | |
204 | .It | |
205 | An optional field, consisting of a decimal digit string followed by a | |
206 | .Cm $ , | |
207 | specifying the next argument to access. | |
208 | If this field is not provided, the argument following the last | |
209 | argument accessed will be used. | |
210 | Arguments are numbered starting at | |
211 | .Cm 1 . | |
212 | If unaccessed arguments in the format string are interspersed with ones that | |
213 | are accessed the results will be indeterminate. | |
214 | .It | |
215 | Zero or more of the following flags: | |
9385eb3d A |
216 | .Bl -tag -width ".So \ Sc (space)" |
217 | .It Sq Cm # | |
218 | The value should be converted to an | |
5b2abdfb A |
219 | .Dq alternate form . |
220 | For | |
221 | .Cm c , d , i , n , p , s , | |
222 | and | |
223 | .Cm u | |
224 | conversions, this option has no effect. | |
225 | For | |
226 | .Cm o | |
227 | conversions, the precision of the number is increased to force the first | |
1f2f436a | 228 | character of the output string to a zero. |
5b2abdfb A |
229 | For |
230 | .Cm x | |
231 | and | |
232 | .Cm X | |
233 | conversions, a non-zero result has the string | |
234 | .Ql 0x | |
235 | (or | |
236 | .Ql 0X | |
237 | for | |
238 | .Cm X | |
239 | conversions) prepended to it. | |
240 | For | |
9385eb3d | 241 | .Cm a , A , e , E , f , F , g , |
5b2abdfb A |
242 | and |
243 | .Cm G | |
244 | conversions, the result will always contain a decimal point, even if no | |
245 | digits follow it (normally, a decimal point appears in the results of | |
246 | those conversions only if a digit follows). | |
247 | For | |
248 | .Cm g | |
249 | and | |
250 | .Cm G | |
251 | conversions, trailing zeros are not removed from the result as they | |
252 | would otherwise be. | |
9385eb3d A |
253 | .It So Cm 0 Sc (zero) |
254 | Zero padding. | |
5b2abdfb A |
255 | For all conversions except |
256 | .Cm n , | |
257 | the converted value is padded on the left with zeros rather than blanks. | |
258 | If a precision is given with a numeric conversion | |
259 | .Cm ( d , i , o , u , i , x , | |
260 | and | |
261 | .Cm X ) , | |
262 | the | |
263 | .Cm 0 | |
264 | flag is ignored. | |
9385eb3d A |
265 | .It Sq Cm \- |
266 | A negative field width flag; | |
267 | the converted value is to be left adjusted on the field boundary. | |
5b2abdfb A |
268 | Except for |
269 | .Cm n | |
270 | conversions, the converted value is padded on the right with blanks, | |
271 | rather than on the left with blanks or zeros. | |
272 | A | |
273 | .Cm \- | |
274 | overrides a | |
275 | .Cm 0 | |
276 | if both are given. | |
9385eb3d A |
277 | .It So "\ " Sc (space) |
278 | A blank should be left before a positive number | |
5b2abdfb | 279 | produced by a signed conversion |
9385eb3d | 280 | .Cm ( a , A , d , e , E , f , F , g , G , |
5b2abdfb A |
281 | or |
282 | .Cm i ) . | |
9385eb3d A |
283 | .It Sq Cm + |
284 | A sign must always be placed before a | |
5b2abdfb A |
285 | number produced by a signed conversion. |
286 | A | |
287 | .Cm + | |
288 | overrides a space if both are used. | |
9385eb3d A |
289 | .It Sq Cm ' |
290 | Decimal conversions | |
291 | .Cm ( d , u , | |
292 | or | |
293 | .Cm i ) | |
294 | or the integral portion of a floating point conversion | |
295 | .Cm ( f | |
296 | or | |
297 | .Cm F ) | |
298 | should be grouped and separated by thousands using | |
299 | the non-monetary separator returned by | |
300 | .Xr localeconv 3 . | |
5b2abdfb A |
301 | .El |
302 | .It | |
ad3c9f2a A |
303 | An optional separator character ( |
304 | .Cm \ , | \; | \ : | _ | |
305 | ) used for separating multiple values when printing an AltiVec or SSE vector, | |
306 | or other multi-value unit. | |
307 | .Pp | |
308 | NOTE: This is an extension to the | |
309 | .Fn printf | |
310 | specification. | |
311 | Behaviour of these values for | |
312 | .Fn printf | |
313 | is only defined for operating systems conforming to the | |
314 | AltiVec Technology Programming Interface Manual. | |
315 | (At time of writing this includes only Mac OS X 10.2 and later.) | |
316 | .It | |
5b2abdfb A |
317 | An optional decimal digit string specifying a minimum field width. |
318 | If the converted value has fewer characters than the field width, it will | |
319 | be padded with spaces on the left (or right, if the left-adjustment | |
320 | flag has been given) to fill out | |
321 | the field width. | |
322 | .It | |
323 | An optional precision, in the form of a period | |
324 | .Cm \&. | |
325 | followed by an | |
326 | optional digit string. | |
327 | If the digit string is omitted, the precision is taken as zero. | |
328 | This gives the minimum number of digits to appear for | |
329 | .Cm d , i , o , u , x , | |
330 | and | |
331 | .Cm X | |
332 | conversions, the number of digits to appear after the decimal-point for | |
9385eb3d | 333 | .Cm a , A , e , E , f , |
5b2abdfb | 334 | and |
9385eb3d | 335 | .Cm F |
5b2abdfb A |
336 | conversions, the maximum number of significant digits for |
337 | .Cm g | |
338 | and | |
339 | .Cm G | |
340 | conversions, or the maximum number of characters to be printed from a | |
341 | string for | |
342 | .Cm s | |
343 | conversions. | |
344 | .It | |
9385eb3d A |
345 | An optional length modifier, that specifies the size of the argument. |
346 | The following length modifiers are valid for the | |
347 | .Cm d , i , n , o , u , x , | |
5b2abdfb A |
348 | or |
349 | .Cm X | |
9385eb3d A |
350 | conversion: |
351 | .Bl -column ".Cm q Em (deprecated)" ".Vt signed char" ".Vt unsigned long long" ".Vt long long *" | |
352 | .It Sy Modifier Ta Cm d , i Ta Cm o , u , x , X Ta Cm n | |
353 | .It Cm hh Ta Vt "signed char" Ta Vt "unsigned char" Ta Vt "signed char *" | |
354 | .It Cm h Ta Vt short Ta Vt "unsigned short" Ta Vt "short *" | |
355 | .It Cm l No (ell) Ta Vt long Ta Vt "unsigned long" Ta Vt "long *" | |
356 | .It Cm ll No (ell ell) Ta Vt "long long" Ta Vt "unsigned long long" Ta Vt "long long *" | |
357 | .It Cm j Ta Vt intmax_t Ta Vt uintmax_t Ta Vt "intmax_t *" | |
358 | .It Cm t Ta Vt ptrdiff_t Ta (see note) Ta Vt "ptrdiff_t *" | |
359 | .It Cm z Ta (see note) Ta Vt size_t Ta (see note) | |
360 | .It Cm q Em (deprecated) Ta Vt quad_t Ta Vt u_quad_t Ta Vt "quad_t *" | |
361 | .El | |
362 | .Pp | |
363 | Note: | |
364 | the | |
365 | .Cm t | |
366 | modifier, when applied to a | |
367 | .Cm o , u , x , | |
5b2abdfb A |
368 | or |
369 | .Cm X | |
9385eb3d A |
370 | conversion, indicates that the argument is of an unsigned type |
371 | equivalent in size to a | |
372 | .Vt ptrdiff_t . | |
373 | The | |
374 | .Cm z | |
375 | modifier, when applied to a | |
376 | .Cm d | |
5b2abdfb | 377 | or |
9385eb3d A |
378 | .Cm i |
379 | conversion, indicates that the argument is of a signed type equivalent in | |
380 | size to a | |
381 | .Vt size_t . | |
382 | Similarly, when applied to an | |
5b2abdfb | 383 | .Cm n |
9385eb3d A |
384 | conversion, it indicates that the argument is a pointer to a signed type |
385 | equivalent in size to a | |
386 | .Vt size_t . | |
387 | .Pp | |
388 | The following length modifier is valid for the | |
389 | .Cm a , A , e , E , f , F , g , | |
5b2abdfb A |
390 | or |
391 | .Cm G | |
9385eb3d A |
392 | conversion: |
393 | .Bl -column ".Sy Modifier" ".Cm a , A , e , E , f , F , g , G" | |
394 | .It Sy Modifier Ta Cm a , A , e , E , f , F , g , G | |
3d9156a7 A |
395 | .It Cm l No (ell) Ta Vt double |
396 | (ignored, same behavior as without it) | |
9385eb3d A |
397 | .It Cm L Ta Vt "long double" |
398 | .El | |
399 | .Pp | |
400 | The following length modifier is valid for the | |
401 | .Cm c | |
402 | or | |
403 | .Cm s | |
404 | conversion: | |
405 | .Bl -column ".Sy Modifier" ".Vt wint_t" ".Vt wchar_t *" | |
406 | .It Sy Modifier Ta Cm c Ta Cm s | |
407 | .It Cm l No (ell) Ta Vt wint_t Ta Vt "wchar_t *" | |
408 | .El | |
ad3c9f2a A |
409 | .Pp |
410 | The AltiVec Technology Programming Interface Manual also defines five additional length modifiers | |
411 | which can be used (in place of the conventional length modifiers) for the printing of AltiVec or SSE vectors: | |
412 | .Bl -tag -compact | |
413 | .It Cm v | |
414 | Treat the argument as a vector value, unit length will be determined by the conversion | |
415 | specifier (default = 16 8-bit units for all integer conversions, | |
416 | 4 32-bit units for floating point conversions). | |
417 | .It Cm vh, hv | |
418 | Treat the argument as a vector of 8 16-bit units. | |
419 | .It Cm vl, lv | |
420 | Treat the argument as a vector of 4 32-bit units. | |
421 | .El | |
422 | .Pp | |
423 | NOTE: The vector length specifiers are extensions to the | |
424 | .Fn printf | |
425 | specification. | |
426 | Behaviour of these values for | |
427 | .Fn printf | |
428 | is only defined for operating systems conforming to the | |
429 | AltiVec Technology Programming Interface Manual. | |
430 | (At time of writing this includes only Mac OS X 10.2 and later.) | |
431 | .Pp | |
432 | As a further extension, for SSE2 64-bit units: | |
433 | .Bl -tag -compact | |
434 | .It Cm vll, llv | |
435 | Treat the argument as a vector of 2 64-bit units. | |
436 | .El | |
5b2abdfb A |
437 | .It |
438 | A character that specifies the type of conversion to be applied. | |
439 | .El | |
440 | .Pp | |
441 | A field width or precision, or both, may be indicated by | |
442 | an asterisk | |
443 | .Ql * | |
444 | or an asterisk followed by one or more decimal digits and a | |
445 | .Ql $ | |
446 | instead of a | |
447 | digit string. | |
448 | In this case, an | |
449 | .Vt int | |
450 | argument supplies the field width or precision. | |
451 | A negative field width is treated as a left adjustment flag followed by a | |
452 | positive field width; a negative precision is treated as though it were | |
453 | missing. | |
9385eb3d A |
454 | If a single format directive mixes positional |
455 | .Pq Li nn$ | |
5b2abdfb A |
456 | and non-positional arguments, the results are undefined. |
457 | .Pp | |
458 | The conversion specifiers and their meanings are: | |
9385eb3d | 459 | .Bl -tag -width ".Cm diouxX" |
5b2abdfb A |
460 | .It Cm diouxX |
461 | The | |
462 | .Vt int | |
463 | (or appropriate variant) argument is converted to signed decimal | |
464 | .Cm ( d | |
465 | and | |
466 | .Cm i ) , | |
467 | unsigned octal | |
468 | .Pq Cm o , | |
469 | unsigned decimal | |
470 | .Pq Cm u , | |
471 | or unsigned hexadecimal | |
472 | .Cm ( x | |
473 | and | |
474 | .Cm X ) | |
475 | notation. | |
476 | The letters | |
9385eb3d | 477 | .Dq Li abcdef |
5b2abdfb A |
478 | are used for |
479 | .Cm x | |
480 | conversions; the letters | |
9385eb3d | 481 | .Dq Li ABCDEF |
5b2abdfb A |
482 | are used for |
483 | .Cm X | |
484 | conversions. | |
485 | The precision, if any, gives the minimum number of digits that must | |
486 | appear; if the converted value requires fewer digits, it is padded on | |
487 | the left with zeros. | |
488 | .It Cm DOU | |
489 | The | |
9385eb3d | 490 | .Vt "long int" |
5b2abdfb A |
491 | argument is converted to signed decimal, unsigned octal, or unsigned |
492 | decimal, as if the format had been | |
493 | .Cm ld , lo , | |
494 | or | |
495 | .Cm lu | |
496 | respectively. | |
497 | These conversion characters are deprecated, and will eventually disappear. | |
498 | .It Cm eE | |
499 | The | |
500 | .Vt double | |
501 | argument is rounded and converted in the style | |
9385eb3d A |
502 | .Sm off |
503 | .Oo \- Oc Ar d Li \&. Ar ddd Li e \\*[Pm] Ar dd | |
504 | .Sm on | |
5b2abdfb A |
505 | where there is one digit before the |
506 | decimal-point character | |
507 | and the number of digits after it is equal to the precision; | |
508 | if the precision is missing, | |
509 | it is taken as 6; if the precision is | |
510 | zero, no decimal-point character appears. | |
511 | An | |
512 | .Cm E | |
513 | conversion uses the letter | |
9385eb3d | 514 | .Ql E |
5b2abdfb | 515 | (rather than |
9385eb3d | 516 | .Ql e ) |
5b2abdfb A |
517 | to introduce the exponent. |
518 | The exponent always contains at least two digits; if the value is zero, | |
519 | the exponent is 00. | |
9385eb3d A |
520 | .Pp |
521 | For | |
522 | .Cm a , A , e , E , f , F , g , | |
523 | and | |
524 | .Cm G | |
525 | conversions, positive and negative infinity are represented as | |
526 | .Li inf | |
527 | and | |
528 | .Li -inf | |
529 | respectively when using the lowercase conversion character, and | |
530 | .Li INF | |
531 | and | |
532 | .Li -INF | |
533 | respectively when using the uppercase conversion character. | |
534 | Similarly, NaN is represented as | |
535 | .Li nan | |
536 | when using the lowercase conversion, and | |
537 | .Li NAN | |
538 | when using the uppercase conversion. | |
539 | .It Cm fF | |
5b2abdfb A |
540 | The |
541 | .Vt double | |
542 | argument is rounded and converted to decimal notation in the style | |
9385eb3d A |
543 | .Sm off |
544 | .Oo \- Oc Ar ddd Li \&. Ar ddd , | |
545 | .Sm on | |
5b2abdfb A |
546 | where the number of digits after the decimal-point character |
547 | is equal to the precision specification. | |
548 | If the precision is missing, it is taken as 6; if the precision is | |
549 | explicitly zero, no decimal-point character appears. | |
550 | If a decimal point appears, at least one digit appears before it. | |
551 | .It Cm gG | |
552 | The | |
553 | .Vt double | |
554 | argument is converted in style | |
555 | .Cm f | |
556 | or | |
557 | .Cm e | |
558 | (or | |
9385eb3d A |
559 | .Cm F |
560 | or | |
5b2abdfb A |
561 | .Cm E |
562 | for | |
563 | .Cm G | |
564 | conversions). | |
565 | The precision specifies the number of significant digits. | |
566 | If the precision is missing, 6 digits are given; if the precision is zero, | |
567 | it is treated as 1. | |
568 | Style | |
569 | .Cm e | |
9385eb3d | 570 | is used if the exponent from its conversion is less than \-4 or greater than |
5b2abdfb A |
571 | or equal to the precision. |
572 | Trailing zeros are removed from the fractional part of the result; a | |
573 | decimal point appears only if it is followed by at least one digit. | |
9385eb3d A |
574 | .It Cm aA |
575 | The | |
576 | .Vt double | |
3d9156a7 | 577 | argument is rounded and converted to hexadecimal notation in the style |
9385eb3d A |
578 | .Sm off |
579 | .Oo \- Oc Li 0x Ar h Li \&. Ar hhhp Oo \\*[Pm] Oc Ar d , | |
580 | .Sm on | |
581 | where the number of digits after the hexadecimal-point character | |
582 | is equal to the precision specification. | |
3d9156a7 A |
583 | If the precision is missing, it is taken as enough to represent |
584 | the floating-point number exactly, and no rounding occurs. | |
585 | If the precision is zero, no hexadecimal-point character appears. | |
9385eb3d A |
586 | The |
587 | .Cm p | |
588 | is a literal character | |
3d9156a7 A |
589 | .Ql p , |
590 | and the exponent consists of a positive or negative sign | |
591 | followed by a decimal number representing an exponent of 2. | |
9385eb3d A |
592 | The |
593 | .Cm A | |
594 | conversion uses the prefix | |
595 | .Dq Li 0X | |
596 | (rather than | |
597 | .Dq Li 0x ) , | |
598 | the letters | |
599 | .Dq Li ABCDEF | |
600 | (rather than | |
601 | .Dq Li abcdef ) | |
602 | to represent the hex digits, and the letter | |
603 | .Ql P | |
604 | (rather than | |
605 | .Ql p ) | |
606 | to separate the mantissa and exponent. | |
3d9156a7 A |
607 | .Pp |
608 | Note that there may be multiple valid ways to represent floating-point | |
609 | numbers in this hexadecimal format. | |
610 | For example, | |
1f2f436a | 611 | .Li 0x1.92p+1 , 0x3.24p+0 , 0x6.48p-1 , |
3d9156a7 A |
612 | and |
613 | .Li 0xc.9p-2 | |
614 | are all equivalent. | |
ad3c9f2a A |
615 | The format chosen depends on the internal representation of the |
616 | number, but the implementation guarantees that the length of the | |
617 | mantissa will be minimized. | |
3d9156a7 A |
618 | Zeroes are always represented with a mantissa of 0 (preceded by a |
619 | .Ql - | |
620 | if appropriate) and an exponent of | |
621 | .Li +0 . | |
9385eb3d A |
622 | .It Cm C |
623 | Treated as | |
624 | .Cm c | |
625 | with the | |
626 | .Cm l | |
627 | (ell) modifier. | |
5b2abdfb A |
628 | .It Cm c |
629 | The | |
630 | .Vt int | |
631 | argument is converted to an | |
9385eb3d | 632 | .Vt "unsigned char" , |
5b2abdfb | 633 | and the resulting character is written. |
9385eb3d A |
634 | .Pp |
635 | If the | |
636 | .Cm l | |
637 | (ell) modifier is used, the | |
638 | .Vt wint_t | |
639 | argument shall be converted to a | |
640 | .Vt wchar_t , | |
641 | and the (potentially multi-byte) sequence representing the | |
642 | single wide character is written, including any shift sequences. | |
643 | If a shift sequence is used, the shift state is also restored | |
644 | to the original state after the character. | |
645 | .It Cm S | |
646 | Treated as | |
647 | .Cm s | |
648 | with the | |
649 | .Cm l | |
650 | (ell) modifier. | |
5b2abdfb A |
651 | .It Cm s |
652 | The | |
9385eb3d | 653 | .Vt "char *" |
5b2abdfb A |
654 | argument is expected to be a pointer to an array of character type (pointer |
655 | to a string). | |
656 | Characters from the array are written up to (but not including) | |
657 | a terminating | |
658 | .Dv NUL | |
659 | character; | |
660 | if a precision is specified, no more than the number specified are | |
661 | written. | |
662 | If a precision is given, no null character | |
663 | need be present; if the precision is not specified, or is greater than | |
664 | the size of the array, the array must contain a terminating | |
665 | .Dv NUL | |
666 | character. | |
9385eb3d A |
667 | .Pp |
668 | If the | |
669 | .Cm l | |
670 | (ell) modifier is used, the | |
671 | .Vt "wchar_t *" | |
672 | argument is expected to be a pointer to an array of wide characters | |
673 | (pointer to a wide string). | |
674 | For each wide character in the string, the (potentially multi-byte) | |
675 | sequence representing the | |
676 | wide character is written, including any shift sequences. | |
677 | If any shift sequence is used, the shift state is also restored | |
678 | to the original state after the string. | |
679 | Wide characters from the array are written up to (but not including) | |
680 | a terminating wide | |
681 | .Dv NUL | |
682 | character; | |
683 | if a precision is specified, no more than the number of bytes specified are | |
684 | written (including shift sequences). | |
685 | Partial characters are never written. | |
686 | If a precision is given, no null character | |
687 | need be present; if the precision is not specified, or is greater than | |
688 | the number of bytes required to render the multibyte representation of | |
689 | the string, the array must contain a terminating wide | |
690 | .Dv NUL | |
691 | character. | |
5b2abdfb A |
692 | .It Cm p |
693 | The | |
9385eb3d | 694 | .Vt "void *" |
5b2abdfb A |
695 | pointer argument is printed in hexadecimal (as if by |
696 | .Ql %#x | |
697 | or | |
698 | .Ql %#lx ) . | |
699 | .It Cm n | |
700 | The number of characters written so far is stored into the | |
701 | integer indicated by the | |
9385eb3d | 702 | .Vt "int *" |
5b2abdfb A |
703 | (or variant) pointer argument. |
704 | No argument is converted. | |
705 | .It Cm % | |
706 | A | |
707 | .Ql % | |
708 | is written. | |
709 | No argument is converted. | |
710 | The complete conversion specification | |
711 | is | |
712 | .Ql %% . | |
713 | .El | |
714 | .Pp | |
9385eb3d A |
715 | The decimal point |
716 | character is defined in the program's locale (category | |
717 | .Dv LC_NUMERIC ) . | |
718 | .Pp | |
5b2abdfb | 719 | In no case does a non-existent or small field width cause truncation of |
9385eb3d A |
720 | a numeric field; if the result of a conversion is wider than the field |
721 | width, the | |
5b2abdfb A |
722 | field is expanded to contain the conversion result. |
723 | .Sh EXAMPLES | |
724 | To print a date and time in the form | |
725 | .Dq Li "Sunday, July 3, 10:02" , | |
726 | where | |
727 | .Fa weekday | |
728 | and | |
729 | .Fa month | |
730 | are pointers to strings: | |
731 | .Bd -literal -offset indent | |
732 | #include <stdio.h> | |
733 | fprintf(stdout, "%s, %s %d, %.2d:%.2d\en", | |
734 | weekday, month, day, hour, min); | |
735 | .Ed | |
736 | .Pp | |
737 | To print \*(Pi | |
738 | to five decimal places: | |
739 | .Bd -literal -offset indent | |
740 | #include <math.h> | |
741 | #include <stdio.h> | |
742 | fprintf(stdout, "pi = %.5f\en", 4 * atan(1.0)); | |
743 | .Ed | |
744 | .Pp | |
745 | To allocate a 128 byte string and print into it: | |
746 | .Bd -literal -offset indent | |
747 | #include <stdio.h> | |
748 | #include <stdlib.h> | |
749 | #include <stdarg.h> | |
750 | char *newfmt(const char *fmt, ...) | |
751 | { | |
9385eb3d A |
752 | char *p; |
753 | va_list ap; | |
754 | if ((p = malloc(128)) == NULL) | |
755 | return (NULL); | |
756 | va_start(ap, fmt); | |
757 | (void) vsnprintf(p, 128, fmt, ap); | |
758 | va_end(ap); | |
759 | return (p); | |
760 | } | |
761 | .Ed | |
762 | .Sh SECURITY CONSIDERATIONS | |
763 | The | |
764 | .Fn sprintf | |
765 | and | |
766 | .Fn vsprintf | |
767 | functions are easily misused in a manner which enables malicious users | |
768 | to arbitrarily change a running program's functionality through | |
769 | a buffer overflow attack. | |
770 | Because | |
771 | .Fn sprintf | |
772 | and | |
773 | .Fn vsprintf | |
774 | assume an infinitely long string, | |
775 | callers must be careful not to overflow the actual space; | |
776 | this is often hard to assure. | |
777 | For safety, programmers should use the | |
778 | .Fn snprintf | |
779 | interface instead. | |
780 | For example: | |
781 | .Bd -literal | |
782 | void | |
783 | foo(const char *arbitrary_string, const char *and_another) | |
784 | { | |
785 | char onstack[8]; | |
786 | ||
787 | #ifdef BAD | |
788 | /* | |
789 | * This first sprintf is bad behavior. Do not use sprintf! | |
790 | */ | |
791 | sprintf(onstack, "%s, %s", arbitrary_string, and_another); | |
792 | #else | |
793 | /* | |
794 | * The following two lines demonstrate better use of | |
795 | * snprintf(). | |
796 | */ | |
797 | snprintf(onstack, sizeof(onstack), "%s, %s", arbitrary_string, | |
798 | and_another); | |
799 | #endif | |
5b2abdfb A |
800 | } |
801 | .Ed | |
9385eb3d A |
802 | .Pp |
803 | The | |
804 | .Fn printf | |
805 | and | |
806 | .Fn sprintf | |
807 | family of functions are also easily misused in a manner | |
808 | allowing malicious users to arbitrarily change a running program's | |
809 | functionality by either causing the program | |
810 | to print potentially sensitive data | |
811 | .Dq "left on the stack" , | |
812 | or causing it to generate a memory fault or bus error | |
813 | by dereferencing an invalid pointer. | |
814 | .Pp | |
815 | .Cm %n | |
816 | can be used to write arbitrary data to potentially carefully-selected | |
817 | addresses. | |
818 | Programmers are therefore strongly advised to never pass untrusted strings | |
819 | as the | |
820 | .Fa format | |
821 | argument, as an attacker can put format specifiers in the string | |
822 | to mangle your stack, | |
823 | leading to a possible security hole. | |
824 | This holds true even if the string was built using a function like | |
825 | .Fn snprintf , | |
826 | as the resulting string may still contain user-supplied conversion specifiers | |
827 | for later interpolation by | |
828 | .Fn printf . | |
829 | .Pp | |
830 | Always use the proper secure idiom: | |
831 | .Pp | |
832 | .Dl "snprintf(buffer, sizeof(buffer), \*q%s\*q, string);" | |
1f2f436a | 833 | .Sh COMPATIBILITY |
1f2f436a A |
834 | The conversion formats |
835 | .Cm \&%D , \&%O , | |
836 | and | |
837 | .Cm %U | |
838 | are not standard and | |
839 | are provided only for backward compatibility. | |
840 | The effect of padding the | |
841 | .Cm %p | |
842 | format with zeros (either by the | |
843 | .Cm 0 | |
844 | flag or by specifying a precision), and the benign effect (i.e., none) | |
845 | of the | |
846 | .Cm # | |
847 | flag on | |
848 | .Cm %n | |
849 | and | |
850 | .Cm %p | |
851 | conversions, as well as other | |
852 | nonsensical combinations such as | |
853 | .Cm %Ld , | |
854 | are not standard; such combinations | |
855 | should be avoided. | |
9385eb3d A |
856 | .Sh ERRORS |
857 | In addition to the errors documented for the | |
858 | .Xr write 2 | |
859 | system call, the | |
860 | .Fn printf | |
861 | family of functions may fail if: | |
862 | .Bl -tag -width Er | |
863 | .It Bq Er EILSEQ | |
864 | An invalid wide character code was encountered. | |
865 | .It Bq Er ENOMEM | |
866 | Insufficient storage space is available. | |
867 | .El | |
5b2abdfb A |
868 | .Sh SEE ALSO |
869 | .Xr printf 1 , | |
ad3c9f2a | 870 | .Xr printf_l 3 , |
9385eb3d A |
871 | .Xr fmtcheck 3 , |
872 | .Xr scanf 3 , | |
873 | .Xr setlocale 3 , | |
ad3c9f2a | 874 | .Xr stdarg 3 , |
9385eb3d | 875 | .Xr wprintf 3 |
5b2abdfb | 876 | .Sh STANDARDS |
9385eb3d A |
877 | Subject to the caveats noted in the |
878 | .Sx BUGS | |
879 | section below, the | |
5b2abdfb A |
880 | .Fn fprintf , |
881 | .Fn printf , | |
882 | .Fn sprintf , | |
883 | .Fn vprintf , | |
884 | .Fn vfprintf , | |
885 | and | |
886 | .Fn vsprintf | |
887 | functions | |
888 | conform to | |
9385eb3d A |
889 | .St -ansiC |
890 | and | |
891 | .St -isoC-99 . | |
892 | With the same reservation, the | |
893 | .Fn snprintf | |
894 | and | |
895 | .Fn vsnprintf | |
896 | functions conform to | |
1f2f436a A |
897 | .St -isoC-99 , |
898 | while | |
899 | .Fn dprintf | |
900 | and | |
901 | .Fn vdprintf | |
902 | conform to | |
903 | .St -p1003.1-2008 . | |
5b2abdfb A |
904 | .Sh HISTORY |
905 | The functions | |
906 | .Fn asprintf | |
907 | and | |
908 | .Fn vasprintf | |
909 | first appeared in the | |
910 | .Tn GNU C | |
911 | library. | |
912 | These were implemented by | |
913 | .An Peter Wemm Aq peter@FreeBSD.org | |
914 | in | |
915 | .Fx 2.2 , | |
916 | but were later replaced with a different implementation | |
917 | from | |
918 | .An Todd C. Miller Aq Todd.Miller@courtesan.com | |
919 | for | |
920 | .Ox 2.3 . | |
1f2f436a A |
921 | The |
922 | .Fn dprintf | |
5b2abdfb | 923 | and |
1f2f436a A |
924 | .Fn vdprintf |
925 | functions were added in | |
926 | .Fx 8.0 . | |
927 | .Sh BUGS | |
9385eb3d A |
928 | The |
929 | .Nm | |
9385eb3d A |
930 | family of functions do not correctly handle multibyte characters in the |
931 | .Fa format | |
932 | argument. |