Format string
% [flag]* [minimum_field_width] [precision] [length_modifier] <conversion_specifier>
Flags
Flag | Description | |
# | The value should be converted to an "alternate form". | |
0 | zero padded. By default, blank padded | |
- | left adjusted | |
' ' | (A single space) A blank should be left before a positive number (or empty string) produced by a signed conversion. | |
+ | A sign is always placed before a number produced by a signed conversion. |
Minimum Field Width
"a decimal digit string (with non-zero first digit). If the value has fewer characters, it will be padded. In no case does a nonexistent or small field width cause truncation of a field."
Precision
a period ('.') followed by an optional decimal digit string. It has different meanings for different conversions.
Precision | Description | |
d, i, o, u, x, and X | minimum number of digits to appear | printf("%.2d", 1) ==> "01" |
a, A, e, E, f, and F | number of digits to appear after the radix character | printf("%.2f",0.1) ==> "0.10" |
g and G | maximum number of significant digits | |
s and S | maximum number of characters to be printed from a string | printf("%.2s","hello") ==> "he" |
Length Modifier
For each conversion specifier, there is expected argument type. For example, for conversion d, and i, type of arguments should be int. Length Modifiers can be used to specify argument types rather than expected type by default.
Modifier | Conversion | Argument types |
hh | d, i, o, u, x, or X | signed char or unsigned char |
n | signed char* | |
h | d, i, o, u, x, or X | short int or unsigned short int |
b | short int* | |
l | d, i, o, u, x, or X | long int, or unsigned long int |
n | long int* | |
c | wint_t | |
s | wchar_t | |
ll | d, i, o, u, x, or X | long long int, or unsigned long long int |
n | long long int* | |
L | a, A, e, E, f, F, g, or G | long double |
j | d, i, o, u, x, or X | intmax_t, uintmax_t |
z | d, i, o, u, x, or X | size_t, ssize_t |
t | d, i, o, u, x, or X | ptrdiff_t |
Conversion specifier
conversion | arguments | notation | |
d, i | int argument | signed decimal notation | |
o, u, x, X | unsigned int | unsigned octal, unsigned decimal, unsigned hexdec notation | abcedf are used for x. ABCDEF are used for X. |
e, E | double | rounded and converted in the style [-]d.ddde±dd | precision is 6 by default. |
f, F | double | rounded and converted to decimal notation in the style [-]ddd.ddd | precision is 6 by default. |
g, G | double | converted in style f or e (or F or E for G conversions). Style e is used if the exponent from its conversion is less than -4 or greater than or equal to the precision. | |
a, A | double | converted to hexadecimal notation. for a, (using the letters abcdef) in the style [-]0xh.hhhhp±d; | C99; not in SUSv2 |
c | int | converted to an unsigned char, and the resulting character is written | |
s | const char* | Characters from the array are written. | |
p | void * | printed in hexadecimal (as if by %#x or %#lx) | |
n | int * | The number of characters written so far is stored into the integer indicated by the int * (or variant) pointer argument. |
No comments:
Post a Comment