home *** CD-ROM | disk | FTP | other *** search
-
- PRINTF(3) UNIX Programmer's Manual PRINTF(3)
-
- NNAAMMEE
- pprriinnttff, ffpprriinnttff, sspprriinnttff, ssnnpprriinnttff, vvpprriinnttff, vvffpprriinnttff,, vvsspprriinnttff,
- vvssnnpprriinnttff - formatted output conversion
-
- SSYYNNOOPPSSIISS
- ##iinncclluuddee <<ssttddiioo..hh>>
-
- _i_n_t
- pprriinnttff(_c_o_n_s_t _c_h_a_r _*_f_o_r_m_a_t, _._._.)
-
- _i_n_t
- ffpprriinnttff(_F_I_L_E _*_s_t_r_e_a_m, _c_o_n_s_t _c_h_a_r _*_f_o_r_m_a_t, _._._.)
-
- _i_n_t
- sspprriinnttff(_c_h_a_r _*_s_t_r, _c_o_n_s_t _c_h_a_r _*_f_o_r_m_a_t, _._._.)
-
- _i_n_t
- ssnnpprriinnttff(_c_h_a_r _*_s_t_r, _s_i_z_e___t _s_i_z_e, _c_o_n_s_t _c_h_a_r _*_f_o_r_m_a_t, _._._.)
-
- ##iinncclluuddee <<ssttddaarrgg..hh>>
-
- _i_n_t
- vvpprriinnttff(_c_o_n_s_t _c_h_a_r _*_f_o_r_m_a_t, _v_a___l_i_s_t _a_p)
-
- _i_n_t
- vvffpprriinnttff(_F_I_L_E _*_s_t_r_e_a_m, _c_o_n_s_t _c_h_a_r _*_f_o_r_m_a_t, _v_a___l_i_s_t _a_p)
-
- _i_n_t
- vvsspprriinnttff(_c_h_a_r _*_s_t_r, _c_h_a_r _*_f_o_r_m_a_t, _v_a___l_i_s_t _a_p)
-
- _i_n_t
- vvssnnpprriinnttff(_c_h_a_r _*_s_t_r, _s_i_z_e___t _s_i_z_e, _c_o_n_s_t _c_h_a_r _*_f_o_r_m_a_t, _v_a___l_i_s_t _a_p)
-
- DDEESSCCRRIIPPTTIIOONN
- The pprriinnttff() family of functions produces output according to a _f_o_r_m_a_t as
- described below. PPrriinnttff() and vvpprriinnttff() write output to _s_t_d_o_u_t_, the
- standard output stream; ffpprriinnttff() and vvffpprriinnttff() write output to the giv
- en output _s_t_r_e_a_m; sspprriinnttff(), ssnnpprriinnttff(), vvsspprriinnttff(), and vvssnnpprriinnttff()
- write to the character string _s_t_r. These functions write the output under
- the control of a _f_o_r_m_a_t string that specifies how subsequent arguments
- (or arguments accessed via the variablelength argument facilities of
- stdarg(3)) are converted for output. These functions return the number
- of characters printed (not including the trailing `\0' used to end output
- to strings). SSnnpprriinnttff() and vvssnnpprriinnttff() will write at most _s_i_z_e-1 of the
- characters printed into the output string (the _s_i_z_e'th character then
- gets the terminating `\0'); if the return value is greater than or equal
- to the _s_i_z_e argument, the string was too short and some of the printed
- characters were discarded. SSpprriinnttff() and vvsspprriinnttff() effectively assume
- an infinte _s_i_z_e.
-
- The format string is composed of zero or more directives: ordinary char
- acters (not %%), which are copied unchanged to the output stream; and con
- version specifications, each of which results in fetching zero or more
- subsequent arguments. Each conversion specification is introduced by the
- character %%. The arguments must correspond properly (after type promo
- tion) with the conversion specifier. After the %%, the following appear
- in sequence:
-
- oo Zero or more of the following flags:
-
- -- a ## character specifying that the value should be converted
- to an ``alternate form''. For cc, dd, ii, nn, pp, ss, and uu,
- conversions, this option has no effect. For oo conversions,
- the precision of the number is increased to force the first
- character of the output string to a zero (except if a zero
- value is printed with an explicit precision of zero). For
- xx and XX conversions, a nonzero result has the string `0x'
- (or `0X' for XX conversions) prepended to it. For ee, EE, ff,
- gg, and GG, conversions, the result will always contain a
- decimal point, even if no digits follow it (normally, a
- decimal point appears in the results of those conversions
- only if a digit follows). For gg and GG conversions, trail
- ing zeros are not removed from the result as they would
- otherwise be.
-
- -- A zero `00' character specifying zero padding. For all con
- versions except nn, the converted value is padded on the
- left with zeros rather than blanks. If a precision is giv
- en with a numeric conversion (Mc d, ii, oo, uu, ii, xx, and XX),
- the `00' flag is ignored.
-
- -- A negative field width flag `--' indicates the converted
- value is to be left adjusted on the field boundary. Except
- for nn conversions, the converted value is padded on the
- right with blanks, rather than on the left with blanks or
- zeros. A `--' overrides a `00' if both are given.
-
- -- A space, specifying that a blank should be left before a
- positive number produced by a signed conversion (dd, ee, EE,
- ff, gg, GG, or ii).
-
- -- a `++' character specifying that a sign always be placed be
- fore a number produced by a signed conversion. A `++' over
- rides a space if both are used.
-
- oo An optional decimal digit string specifying a minimum field width.
- If the converted value has fewer characters than the field width, it
- will be padded with spaces on the left (or right, if the left
- adjustment flag has been given) to fill out the field width.
-
- oo An optional precision, in the form of a period `..' followed by an op
- tional digit string. If the digit string is omitted, the precision
- is taken as zero. This gives the minimum number of digits to appear
- for dd, ii, oo, uu, xx, and XX conversions, the number of digits to appear
- after the decimalpoint for ee, EE, and ff conversions, the maximum num
- ber of significant digits for gg and GG conversions, or the maximum
- number of characters to be printed from a string for ss conversions.
-
- oo The optional character hh, specifying that a following dd, ii, oo, uu, xx,
- or XX conversion corresponds to a _s_h_o_r_t _i_n_t or _u_n_s_i_g_n_e_d _s_h_o_r_t _i_n_t ar
- gument, or that a following nn conversion corresponds to a pointer to
- a _s_h_o_r_t _i_n_t argument.
-
- oo The optional character ll (ell) specifying that a following dd, ii, oo,
- uu, xx, or XX conversion applies to a pointer to a _l_o_n_g _i_n_t or _u_n_s_i_g_n_e_d
- _l_o_n_g _i_n_t argument, or that a following nn conversion corresponds to a
- pointer to a _l_o_n_g _i_n_t argument.
-
- oo The character LL specifying that a following ee, EE, ff, gg, or GG conver
- sion corresponds to a _l_o_n_g _d_o_u_b_l_e argument (but note that long double
- values are not currently supported by the VAX and Tahoe compilers).
-
- oo A character that specifies the type of conversion to be applied.
-
- A field width or precision, or both, may be indicated by an asterisk `*'
- instead of a digit string. In this case, an _i_n_t argument supplies the
- field width or precision. A negative field width is treated as a left
- adjustment flag followed by a positive field width; a negative precision
- is treated as though it were missing.
-
- The conversion specifiers and their meanings are:
-
- ddiioouuxxXX The _i_n_t (or appropriate variant) argument is converted to signed
- decimal (dd and ii), unsigned octal (oo), unsigned decimal (uu), or
- unsigned hexadecimal (xx and XX) notation. The letters aabbccddeeff are
- used for xx conversions; the letters AABBCCDDEEFF are used for conver
- sions. The precision, if any, gives the minimum number of digits
- that must appear; if the converted value requires fewer digits,
- it is padded on the left with zeros.
-
- DDOOUU The _l_o_n_g _i_n_t argument is converted to signed decimal, unsigned
- octal, or unsigned decimal, as if the format had been lldd, lloo, or
- lluu respectively. These conversion characters are deprecated, and
- will eventually disappear.
-
- eeEE The _d_o_u_b_l_e argument is rounded and converted in the style
- [-]d..dddee+dd where there is one digit before the decimalpoint
- character and the number of digits after it is equal to the pre
- cision; if the precision is missing, it is taken as 6; if the
- precision is zero, no decimalpoint character appears. An EE con
- version uses the letter EE (rather than ee) to introduce the expo
- nent. The exponent always contains at least two digits; if the
- value is zero, the exponent is 00.
-
- ff The _d_o_u_b_l_e argument is rounded and converted to decimal notation
- in the style []ddd..ddd, where the number of digits after the
- decimalpoint character is equal to the precision specification.
- If the precision is missing, it is taken as 6; if the precision
- is explicitly zero, no decimalpoint character appears. If a
- decimal point appears, at least one digit appears before it.
-
- gg The _d_o_u_b_l_e argument is converted in style ff or ee (or EE for GG con
- versions). The precision specifies the number of significant
- digits. If the precision is missing, 6 digits are given; if the
- precision is zero, it is treated as 1. Style ee is used if the
- exponent from its conversion is less than 4 or greater than or
- equal to the precision. Trailing zeros are removed from the
- fractional part of the result; a decimal point appears only if it
- is followed by at least one digit.
-
- cc The _i_n_t argument is converted to an _u_n_s_i_g_n_e_d _c_h_a_r, and the re
- sulting character is written.
-
- ss The ``_c_h_a_r _*'' argument is expected to be a pointer to an array
- of character type (pointer to a string). Characters from the ar
- ray are written up to (but not including) a terminating NUL char
- acter; if a precision is specified, no more than the number spec
- ified are written. If a precision is given, no null character
- need be present; if the precision is not specified, or is greater
- than the size of the array, the array must contain a terminating
- NUL character.
-
- pp The ``_v_o_i_d _*'' pointer argument is printed in hexadecimal (as if
- by `%#x' or `%#lx').
-
- nn The number of characters written so far is stored into the inte
- ger indicated by the ``_i_n_t _*'' (or variant) pointer argument. No
- argument is converted.
-
- %% A `%' is written. No argument is converted. The complete conver
- sion specification is `%%'.
-
- In no case does a nonexistent or small field width cause truncation of a
- field; if the result of a conversion is wider than the field width, the
- field is expanded to contain the conversion result.
-
- EEXXAAMMPPLLEESS
- To print a date and time in the form `Sunday, July 3, 10:02', where
- _w_e_e_k_d_a_y and _m_o_n_t_h are pointers to strings:
-
- #include <stdio.h>
- fprintf(stdout, "%s, %s %d, %.2d:%.2d\n",
- weekday, month, day, hour, min);
-
- To print pi to five decimal places:
-
- #include <math.h>
- #include <stdio.h>
- fprintf(stdout, "pi = %.5f\n", 4 * atan(1.0));
-
- To allocate a 128 byte string and print into it:
-
- #include <stdio.h>
- #include <stdlib.h>
- #include <stdarg.h>
- char *newfmt(const char *fmt, ...)
- {
- char *p;
- va_list ap;
- if ((p = malloc(128)) == NULL)
- return (NULL);
- va_start(ap, fmt);
- (void) vsnprintf(p, 128, fmt, ap);
- va_end(ap);
- return (p);
- }
-
- SSEEEE AALLSSOO
- printf(1), scanf(3)
-
- SSTTAANNDDAARRDDSS
- The ffpprriinnttff(), pprriinnttff(), sspprriinnttff(), vvpprriinnttff(), vvffpprriinnttff(), and vvsspprriinnttff()
- functions conform to ANSI C3.1591989 (``ANSI C'').
-
- HHIISSTTOORRYY
- The functions ssnnpprriinnttff() and vvssnnpprriinnttff() are new to this release.
-
- BBUUGGSS
- The conversion formats %%DD, %%OO, and %%UU are not standard and are provided
- only for backward compatibility. The effect of padding the %%pp format
- with zeros (either by the `00' flag or by specifying a precision), and the
- benign effect (i.e., none) of the `##' flag on %%nn and %%pp conversions, as
- well as other nonsensical combinations such as %%LLdd, are not standard;
- such combinations should be avoided.
-
- Because sspprriinnttff() and vvsspprriinnttff() assume an infinitely long string,
- callers must be careful not to overflow the actual space; this is often
- impossible to assure. For safety, programmers should use the ssnnpprriinnttff()
- interface instead. Unfortunately, this interface is not portable.
-
- BSD Experimental July 30, 1991 4
-
-
-
-
-
-
-
-
-
-
-