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를 인쇄한다는 의미입니다.

여기서 llong int에 대한 길이 지정자이고 uunsigned 숫자에 대한 지정자입니다. 나머지 선택적 인수는 무시됩니다.

이 패턴의 끝에 있는 지정자는 인쇄할 데이터 유형을 정의하므로 가장 중요한 부분입니다. 다양한 지정자 목록과 해당 설명은 아래 표에 나와 있습니다.

지정자 설명
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)가 설정되고 쓰기 오류가 발생하면 음의 정수가 반환됩니다.

ErrnoEILSEQ로 설정되며, 와이드 문자 쓰기 중 멀티바이트 문자 인코딩 오류가 발생하면 음의 정수가 제공됩니다.

예:

#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