|
|
1.1 root 1: .\" @(#)printf.3 6.7 (Berkeley) 4/14/89
2: .\"
3: .TH PRINTF 3 "October 22, 1987"
4: .AT 3
5: .SH NAME
6: fprintf, printf, sprintf, vprintf, vfprintf, vsprintf - formatted
7: output conversion
8: .SH SYNOPSIS
9: .B #include <stdio.h>
10: .PP
11: .B printf(format
12: .RB [ ,
13: arg ] ...
14: .B )
15: .br
16: .B char *format;
17: .PP
18: .B fprintf(stream, format
19: .RB [ ,
20: arg ] ...
21: .B )
22: .br
23: .SM
24: .B FILE
25: .B *stream;
26: .br
27: .B char *format;
28: .PP
29: .B sprintf(s, format
30: .RB [ ,
31: arg ] ...
32: .B )
33: .br
34: .B char *s, *format;
35: .PP
36: .B #include <varargs.h>
37: .br
38: .B vprintf(format, args)
39: .br
40: .B char *format;
41: .br
42: .B va_list args;
43: .PP
44: .B vfprintf(stream, format, args)
45: .br
46: .B FILE *stream;
47: .br
48: .B char *format;
49: .br
50: .B va_list args;
51: .PP
52: .B vsprintf(s, format, args)
53: .br
54: .B char *s, *format;
55: .br
56: .B va_list args;
57: .SH DESCRIPTION
58: .I Printf
59: and
60: .I vprintf
61: place output on the standard output stream
62: .BR stdout .
63: .I Fprintf
64: and
65: .I vfprintf
66: place output on the named output
67: .IR stream .
68: .I Sprintf
69: and
70: .I vsprintf
71: copy into the string
72: .IR s ,
73: followed by the character `\e0'.
74: .IR Printf ,
75: .IR fprintf ,
76: and
77: .I sprintf
78: take variadic argument lists directly, while
79: .IR vprintf ,
80: .IR vfprintf ,
81: and
82: .I vsprintf
83: use the variable-length argument facilities of
84: .IR varargs (3)
85: and hence may be called indirectly (see examples).
86: .PP
87: Each function converts, formats, and prints its arguments after the
88: .I format
89: under control of the
90: .I format
91: argument; each returns the the total number of characters printed (not
92: including the trailing `\e0' in
93: .I sprintf
94: and
95: .IR vsprintf ).
96: .I Format
97: is a character string which contains two types of objects: plain characters,
98: which are simply copied to the output stream, and conversion specifications,
99: each of which causes conversion and printing of the next successive
100: .IR arg .
101: .PP
102: Each conversion specification is introduced by the percent character (``%'').
103: The remainder of the conversion specification includes, in the following
104: order,
105: .TP
106: .B \(bu
107: Zero or more of the following flags:
108: .RS
109: .TP
110: .B \(bu
111: a `#' character
112: specifying that the value should be converted to an ``alternate form''.
113: For
114: .BR c ,
115: .BR d ,
116: .BR i ,
117: .BR n ,
118: .BR p ,
119: .BR s ,
120: and
121: .BR u ,
122: conversions, this option has no effect.
123: For
124: .B o
125: conversions, the precision of the number is increased to force the first
126: character of the output string to a zero (except if a zero value is printed
127: with an explicit precision of zero).
128: For
129: .B x
130: and
131: .B X
132: conversions, a non-zero result has the string
133: .B 0x
134: (or
135: .B 0X
136: for
137: .B X
138: conversions) prepended to it.
139: For
140: .BR e ,
141: .BR E ,
142: .BR f ,
143: .BR g ,
144: and
145: .BR G ,
146: conversions, the result will always contain a decimal point, even if no
147: digits follow it (normally, a decimal point appears in the results of
148: those conversions only if a digit follows).
149: For
150: .B g
151: and
152: .B G
153: conversions, trailing zeros are not removed from the result as they
154: would otherwise be.
155: .TP
156: .B \(bu
157: A zero ``0'' character specifying zero padding.
158: For all conversions except
159: .BR n ,
160: the converted value is padded on the left with zeros rather than blanks.
161: If a precision is given with a numeric conversion (
162: .BR d ,
163: .BR i ,
164: .BR o ,
165: .BR u ,
166: .BR i ,
167: .BR x ,
168: and
169: .BR X ),
170: the ``0'' flag is ignored.
171: .TP
172: .B \(bu
173: A minus sign (``-'') specifying left adjustment of the converted value
174: in the indicated field.
175: Except for
176: .B n
177: conversions, the converted value is padded on the right with blanks,
178: rather than on the left with blanks or zeros.
179: A ``-'' overrides a ``0'' if both are given.
180: .TP
181: .B \(bu
182: A space, specifying that a blank should be left before a positive number
183: produced by a signed conversion (
184: .BR d ,
185: .BR e ,
186: .BR E ,
187: .BR f ,
188: .BR g ,
189: .BR G ,
190: or
191: .BR i ).
192: .TP
193: .B \(bu
194: a `+' character specifying that a sign always be placed before a
195: number produced by a signed conversion.
196: A ``+'' overrides a space if both are used.
197: .RE
198: .TP
199: .B \(bu
200: An optional digit string specifying a field width.
201: If the converted value has fewer characters than the field width, it will
202: be padded on the left (or right, if the left-adjustment flag is used) to
203: make up the field width.
204: .TP
205: .B \(bu
206: An optional precision, in the form of a period (``.'') followed by an
207: optional digit string. If the digit string is omitted, the precision
208: is taken as zero. This gives the minimum number of digits to appear for
209: .BR d ,
210: .BR i ,
211: .BR o ,
212: .BR u ,
213: .BR x ,
214: and
215: .B X
216: conversions, the number of digits to appear after the decimal point for
217: .BR e ,
218: .BR E ,
219: and
220: .B f
221: conversions, the maximum number of significant digits for
222: .B g
223: and
224: .B G
225: conversions, or the maximum number of characters to be printed from a
226: string for
227: .B s
228: conversions.
229: .TP
230: .B \(bu
231: The character
232: .BR h ,
233: specifying that a following
234: .BR d ,
235: .BR i ,
236: .BR o ,
237: .BR u ,
238: .BR x ,
239: or
240: .B X
241: conversion corresponds to a
242: .B "short int"
243: or
244: .B "unsigned short int"
245: argument, or that a following
246: .B n
247: conversion corresponds to a pointer to a
248: .B "short int"
249: argument.
250: .TP
251: .B \(bu
252: the character
253: .B l
254: (ell) specifying that a following
255: .BR d ,
256: .BR i ,
257: .BR o ,
258: .BR u ,
259: .BR x ,
260: or
261: .B X
262: conversion corresponds to a
263: .B "long int"
264: or
265: .B "unsigned long int"
266: argument, or that a following
267: .B n
268: conversion corresponds to a pointer to a
269: .B "long int"
270: argument.
271: .TP
272: .B \(bu
273: The character
274: .B L
275: specifying that a following
276: .BR e ,
277: .BR E ,
278: .BR f ,
279: .BR g ,
280: or
281: .B G
282: conversion corresponds to a
283: .B "long double"
284: argument (but note that long double values are not currently supported
285: by the \s-2VAX\s0 and Tahoe compilers).
286: .TP
287: .B \(bu
288: A character which indicates the type of conversion to be applied.
289: .PP
290: A field width or precision may be an asterisk (``*'') instead of a
291: digit string.
292: In this case an
293: .B int
294: argument supplies the value.
295: A negative field width is treated as a left adjustment flag followed by a
296: positive field width; a negative precision is treated as though it were
297: missing.
298: .PP
299: The conversion characters and their meanings are:
300: .TP
301: .B diouxX
302: The
303: .B int
304: (or appropriate variant) argument is converted to signed decimal
305: .RB ( d " and " i ),
306: unsigned octal
307: .RB ( o ),
308: unsigned decimal
309: .RB ( u ),
310: or unsigned hexadecimal
311: .RB ( x " and " X )
312: notation respectively. The letters
313: .B abcdef
314: are used for
315: .B x
316: conversions; the letters
317: .B ABCDEF
318: are used for
319: .B X
320: conversions.
321: The precision, if any, gives the minimum number of digits that must
322: appear; if the converted value requires fewer digits, it is padded on
323: the left with zeros.
324: .TP
325: .B DOU
326: The
327: .B "long int"
328: argument is converted to signed decimal, unsigned octal, or unsigned
329: decimal, as if the format had been
330: .BR ld ,
331: .BR lo ,
332: or
333: .B lu
334: respectively.
335: These conversion characters are deprecated, and will eventually disappear.
336: .TP 8
337: .B eE
338: The
339: .B double
340: argument is rounded and converted in the style
341: `[\fB\-\fR]d\fB.\fRddd\fBe\fR\(+-dd' where there is one digit before the
342: decimal point and the number after is equal to the precision specification
343: for the argument.
344: If the precision is missing, 6 digits are given; if the precision is
345: explicitly zero, no decimal point appears.
346: An
347: .B E
348: conversion uses the letter
349: .B E
350: (rather than
351: .BR e )
352: to introduce the exponent.
353: The exponent always contains at least two digits; if the value is zero,
354: the exponent is 00.
355: .TP 8
356: .B f
357: The
358: .B double
359: argument is rounded and converted to decimal notation in the style
360: `[\fB\-\fR]ddd.ddd' where the number of digits after the decimal point
361: is equal to the precision.
362: If the precision is missing, 6 digits are given; if the precision is
363: explicitly 0, no digits and no decimal point are printed.
364: If a decimal point appears, at least one digit appears before it.
365: .TP 8
366: .B g
367: The
368: .B double
369: argument is printed in style
370: .B f
371: or
372: .B e
373: (or
374: .B E
375: for
376: .B G
377: conversions).
378: The precision specifies the number of significant digits.
379: If the precision is missing, 6 digits are given; if the precision is zero,
380: it is treated as 1.
381: Style
382: .B e
383: is used if the exponent from its conversion is less than -4 or greater than
384: or equal to the precision.
385: Trailing zeros are removed from the fractional part of the result; a
386: decimal point appears only if it is followed by at least one digit.
387: .TP 8
388: .B c
389: The
390: .B int
391: argument is converted to an
392: .B "unsigned char",
393: and the resulting character is printed.
394: .TP 8
395: .B s
396: The
397: .B "char *"
398: argument is taken to be a string (character pointer).
399: Characters from the string are printed until a null character is reached,
400: or until the number of characters indicated by the precision have been
401: printed, whichever occurs first; if a precision is given, no null character
402: need be present.
403: .TP 8
404: .B p
405: The
406: .B "void *"
407: pointer argument is printed in hexadecimal (as if by ``%x'' or ``%lx'').
408: .TP 8
409: .B n
410: The number of characters written so far is stored into the
411: integer indicated by the
412: .B "int *"
413: (or variant) pointer argument.
414: No argument is converted.
415: .TP 8
416: .B %
417: Prints a `%'; no argument is converted.
418: .PP
419: In no case does a non-existent or small field width cause truncation of
420: a field; if the result of a conversion is wider than the field width, the
421: field is expanded to contain it.
422: Similarly, padding takes place only if the specified field width exceeds
423: the actual width.
424: .PP
425: .SH EXAMPLES
426: .br
427: To print a date and time in the form `Sunday, July 3, 10:02',
428: where
429: .I weekday
430: and
431: .I month
432: are pointers to null-terminated strings:
433: .RS
434: .HP
435: .nh
436: printf("%s, %s %d, %02d:%.2d", weekday, month, day, hour, min);
437: .RE
438: .hy
439: .PP
440: To print
441: .if n pi
442: .if t \(*p
443: to 5 decimals:
444: .IP
445: printf("pi = %.5f", 4*atan(1.0));
446: .PP
447: To allocate a 128 byte string and print into it:
448: .RS
449: .nf
450: .ta 1i 2i
451: .sp
452: #include <stdio.h>
453: #include <varargs.h>
454: char *newfmt(va_alist)
455: va_dcl
456: {
457: char *p, *malloc(), fmt;
458: va_list ap;
459: if ((p = malloc(128)) == NULL)
460: return (NULL);
461: va_start(ap);
462: fmt = va_arg(ap, char *);
463: (void) vsprintf(p, fmt, ap);
464: va_end(ap);
465: return (p);
466: }
467: .RE
468: .fi
469: .SH "SEE ALSO"
470: putc(3), scanf(3)
471: .SH BUGS
472: The conversion formats ``%D'', ``%O'', and ``%U'' are not standard and
473: are provided only for backward compatibility.
474: The effect of padding the ``%p'' format with zeros (either by the ``0''
475: flag or by specifying a precision), and the benign effect (i.e., none)
476: of the ``#'' flag on ``%n'' and ``%p'' conversions, as well as other
477: nonsensical combinations such as ``%Ld'', are not standard; such combinations
478: should be avoided.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.