HOWTO · C
C의 형식 지정자
이것은 C의 printf 함수에서 형식 지정자의 구문 및 사용에 대한 안내서입니다.
이 페이지의 내용
이 글은 C언어의 printf 함수와 이 함수에서 사용되는 서식 지정자에 대한 내용입니다. 이 기사에서는 형식 지정자의 구문과 다양한 데이터 유형에 사용되는 방법에 대해 자세히 설명합니다.
먼저 printf 함수의 구문을 살펴보겠습니다.
C에서 printf() 함수의 형식 지정자
printf() 함수의 구문은 다음과 같습니다.
int printf(const char* format, ...);
이 함수는 표준 출력 콘솔의 format 변수에 저장된 문자열을 씁니다. 이 문자열에 형식 지정자, 즉 일부 변수를 지정하기 위해 % 기호로 시작하는 일부 하위 문자열이 포함되어 있으면 문자열 뒤에 지정된 값으로 대체됩니다.
매개변수:
format
출력에 쓰여질 텍스트는 이 C 문자열에 저장됩니다. 선택적으로 포함된 형식 지정자를 포함할 수 있으며, 다음 추가 인수에 제공된 값으로 대체되고 필요에 따라 형식이 지정됩니다.
형식 지정자는 다음 패턴을 따릅니다.
%[flags][width][.precision][length]specifier
대괄호 []는 이러한 지정자가 선택 사항임을 나타냅니다. 예를 들어 printf("%lu",4294967295)는 부호 없는 긴 형식으로 4294967295를 인쇄한다는 의미입니다.
여기서 l은 long int에 대한 길이 지정자이고 u는 unsigned 숫자에 대한 지정자입니다. 나머지 선택적 인수는 무시됩니다.
이 패턴의 끝에 있는 지정자는 인쇄할 데이터 유형을 정의하므로 가장 중요한 부분입니다. 다양한 지정자 목록과 해당 설명은 아래 표에 나와 있습니다.
| 지정자 | 설명 |
|---|---|
d 또는 i |
부호 있는 10진 정수 |
u |
부호 없는 10진 정수 |
o |
부호 없는 8진수 |
x |
부호 없는 16진수 |
X |
부호 없는 16진수 대문자 |
f |
소문자의 10진수 부동 소수점 |
F |
대문자로 된 10진수 부동 소수점 |
c |
성격 |
s |
끈 |
a |
소문자의 16진수 부동 소수점 |
A |
대문자로 된 16진수 부동 소수점 |
p |
포인터 주소 |
지정자 앞의 나머지 하위 지정자는 모두 선택 사항이지만 용도는 아래에 정의되어 있습니다.
플래그:
| 플래그 | 설명 |
|---|---|
- |
필드를 왼쪽 정렬하기 위해. |
+ |
양수 앞에 강제로 더하기 기호를 배치합니다. |
# |
각각 0, 0x 또는 0X를 배치하기 위한 8진수 및 16진수 지정자(o,x,X)에 사용됩니다. |
0 |
값 왼쪽에 0을 추가합니다. |
너비:
| 너비 | 설명 |
|---|---|
(number) |
인쇄할 최소 문자 수를 지정합니다. |
* |
너비는 형식 문자열이 아닌 형식화할 인수 앞에 오는 추가 정수 값 인수로 제공됩니다. |
정도:
| 정도 | 설명 |
|---|---|
.number |
인쇄할 최소 자릿수를 지정합니다. 숫자의 자릿수가 적으면 왼쪽에 0이 채워집니다. |
.* |
정밀도는 형식 문자열이 아닌 형식화할 인수 앞에 추가 정수 값 인수로 제공됩니다. |
길이:
| 길이 | 설명 |
|---|---|
hh |
정수 유형에 대해 char에서 승격된 int 크기의 정수 인수를 가정하도록 printf를 지정합니다. |
h |
정수 유형에 대한 short에서 승격된 int 크기의 정수 인수를 가정하도록 printf를 지정합니다. |
l |
정수 유형에 대해 긴 크기의 정수 인수를 가정하도록 printf를 지정합니다. 부동 소수점 유형의 경우 무시됩니다. varargs를 사용할 때 float 인수는 자동으로 double로 승격됩니다. |
ll |
정수 유형에 대해 길고 큰 정수 인수를 가정하도록 printf를 지정합니다. |
L |
부동 소수점 유형에 대한 long double 인수를 가정하도록 printf를 지정합니다. |
z |
정수 유형의 경우 printf를 지정하여 size_t 크기의 정수 인수를 가정합니다. |
j |
정수 유형의 경우 intmax_t 크기의 정수 인수를 가정하도록 printf를 지정합니다. |
t |
정수 유형의 경우 ptrdiff_t 크기의 정수 인수를 가정하도록 printf를 지정합니다. |
...
함수는 형식 문자열(또는 n의 경우 저장 위치에 대한 포인터)에 따라 형식 문자열의 형식 지정자를 대체할 값을 각각 보유하는 일련의 추가 인수를 기대할 수 있습니다.
이러한 매개변수의 수는 최소한 형식 지정자에 표시된 값의 수와 같아야 합니다. 이 함수는 추가 인수를 무시합니다.
반환 값:
작업이 성공하면 쓰여진 총 문자 수를 반환합니다. 오류 표시(ferror)가 설정되고 쓰기 오류가 발생하면 음의 정수가 반환됩니다.
Errno는 EILSEQ로 설정되며, 와이드 문자 쓰기 중 멀티바이트 문자 인코딩 오류가 발생하면 음의 정수가 제공됩니다.
예:
#include <stdio.h>
int main() {
printf("Some Character values: %c %c \n", 'b', 66);
printf("Some Decimal Value: %d %ld\n", 1234, 670000L);
printf("Numbers preceeding with blank spaces: %10d \n", 1234);
printf("Numbers preceeding with zeros: %010d \n", 1235);
printf("Different number systems: %d %x %o %#x %#o \n", 100, 100, 100, 100,
100);
return 0;
}
출력:
Some Character values: b B
Some Decimal Value: 1234 670000
Numbers preceeding with blank spaces: 1234
Numbers preceeding with zeros: 0000001235
Different number systems: 100 64 144 0x64 0144