❑ Format string is a string containing one or more format specifiers.
❑ Format specifier has the following syntax.
%[Parameter][Flag][Width][Precision][Length][Type]
❑ Parameter field
Character | Description |
n$ | Select a value(direct parameter access).
* 1$ exists in esp+4 on x86.
* 2$ → esp+8
|
❑ Flag field
Character | Description |
+ | prepend + or - sign. |
- | Left-align. |
0 | If "Width" field is used, empty space is filled with zeros. |
(Space) | Prepend "space character" to the positive number. Prepend "-" to the negative number. |
# | Prepend 0 to the octal number. Prepend 0x to the hexadecimal number. |
❑ Width field
Character | Description |
n or * | Specify the minimum number of characters to print. |
❑ Precision field
Character | Description |
.n or .* | - Decimal type : Same function as Width field. - Float type : Specify the number of digits after the decimal point. - String type : Specify the number of characters. |
❑ Length field
Character | Description |
h | Data type size down(int → short). |
hh | Data type size down(int → char). |
l | Data type size up(int → long). |
ll | Data type size up(int → long long). |
L | Data type size up(double → long double). |
z | Data type change(int → size_t). |
j | Data type change(int → intmax_t). |
t | Data type change(int → ptrdiff_t). |
❑ Type field
Character | Description |
d, i | Int type value. |
u | Unsigned int type value. |
f, F | Double type value with decimal point. |
e, E | Double type value with exponent. |
g, G | Efficient double type value. |
c, C | Char type value. |
a ,A | Double type value with hexadecimal. |
p | Unsigned int type address with hexadecimal. |
x, X | Unsigned int type value with hexadecimal. |
o | Unsigned int type value with octal. |
s | - String type value. - Read string type value from char *. |
n | Write the printed size so far into the following 4 Bytes address.
* Examples of use(Link)
|
hn | Write the printed size so far into the following 2 Bytes address. |
hhn | Write the printed size so far into the following 1 Bytes address.
* If the size output so far causes an overflow in the memory space, the counted value from the beginning is input.
* e.g. If 0x101 is input to the space of 0xFF size, 0x2 is stored.
* 지금까지 출력된 사이즈가 메모리 공간에서 오버플로우를 발생시키면, 처음부터 다시 카운팅 된 값이 입력된다.
* e.g. 0xFF 크기의 공간에 0x101이 입력되면 0x2가 저장된다.
|