C언어 문법 서식 지정 출력(formatted) / 서식 문자열(format string) / 서식 지정자 모음
■ 서식 지정(formatted) 출력이란
C언어 학습할 때 자주 사용했던 함수 printf()가 있습니다. 가장 기본 출력 함수인데, 맨 앞 글자 f는 formatted 입니다. 포맷에 맞춘다는 것은 데이터를 특정 서식에 맞춰 출력하는 것을 의미합니다. 그래서 C언어에서는 '서식 지정 출력'이라고 합니다. 서식 지정 출력 중에서 가장 자주 사용되는 3가지를 보겠습니다.
1 | printf() | 콘솔창(stdout) 에 출력 |
2 | fprintf() | 스트림에 출력 |
3 | sprintf() | 문자열에 출력 |
1 stdout이라는게 우리가 알고 있는 커맨드창 콘솔입니다.
2 fprintf 에서 맨 앞 글자 f는 file을 의미합니다. file을 스트림으로 본다는 거죠
3 sprintf() s는 string입니다.
■ 서식 문자열(format string)란
C는 함수 오버로딩 없기 때문에 printf에 그냥 int형을 넣는다고 int를 출력해주지 않습니다. 그래서 서식문자(%d, %u 같은 것들) 넣어서 뒤에 오는 다른 매개변수들을 어떤 형(포맷)으로 출력할 것인지 알려줘야 합니다. 그런 문자들을 서식문자열(format string)이라고 합니다.
printf("Hello "); // 일반 문자열
printf("%d", grade); // 서식 문자열: 정수
printf("%c", ch); // 서식 문자열: 문자
서식 문자열에는 아래와 같이 여러 데이터가 들어갈 수 있습니다. 이때 데이터들을 서식 지정자의 순서와 동일한 순서로 추가 매개변수로 전달합니다.
printf("Hello. %s\n Your grade is %d\n", name, grade); // 혼합 출력
■ 서식 지정자(format specifier)
1 | % | '%' 출력 | printf("%%\n"); |
2 | c | 문자(char) 출력 | printf("%c\n", 'D'); |
3 | s | 문자열(char[]) 출력 | printf("%s\n", "ABC"); |
4 | d | 부호있는 정수 출력 | printf("%d\n", -10); |
5 | u | 부호없는 정수 출력 | printf("%u\n", 10); |
6 | o | 부호없는 정수를 8진수로 출력, 숫자 앞에 '0'은 안 붙여줌 | printf("%o\n", 10); |
7 | x | 부호없는 정수를 16진수(소문자)로 출력, 숫자 앞에 '0x'은 안 붙여줌 | printf("%x\n", 10); |
8 | X | 부호없는 정수를 16진수(대문자)로 출력, 숫자 앞에 '0x'은 안 붙여줌 | printf("%X\n", 10); |
9 | f | 부동소수점 출력 | printf("%f\n", 3.14); |
10 | e/E | 부동소수점을 지수표기법으로 출력 | printf("%e\n", 3.14); printf("%E\n", 3.14); |
11 | p | 포인터값을 출력 | printf("%p\n", (void*)name); |
3 "%s" 대신 곧바로 문자열을 printf에 넣어도 되지만 어떤 컴파일러에서는 warning을 주는 경우가 있습니다. 무효하지는 않습니다.
5 %u" 에 부호있는 수를 넣을 경우 해당 수의 비트 패턴에 해당하는 부호없는 수가 출력됩니다.
7 "%X"는 있는데 "%O"가 없는 이유: 8진수는 숫자로만 이루어져 있기 때문에
11 "%p"는 주소를 출력하는데 void*만 받음: 모든 주소는 어차피 길이가 같으니 어떤 포인터를 void*로 캐스팅해도 안전하니까
-----------------------------------
-----------------------------------
'컴퓨터 공학 > C, C++' 카테고리의 다른 글
[ C ]메모리 이해하기12_메모리 정리 (413) | 2020.07.23 |
---|---|
[ C ] 문자열 함수 이해하기8_C스타일 문자열 정리 (411) | 2020.07.23 |
[ C ] 문자열 함수 이해하기6_입출력 이외의 문자열 관련 함수_strlen, strcpy, strcat, strcmp (411) | 2020.07.22 |
[ C ] 문자열 함수 이해하기5_표준 입출력과 버퍼_버퍼링 하는 이유/fllush 함수/입력 버퍼 비우기 (398) | 2020.07.22 |
[ C ] 문자열 함수 이해하기4_문자열 단위 입출력 함수_puts, fputs, gets, fgets (398) | 2020.07.21 |
댓글