C 언어에서 표준 입출력 라이브러리(stdio.h)는 다양한 출력 함수를 제공합니다. 그중 가장 많이 사용되는 세 가지 함수인 printf(), sprintf(), fprintf()는 비슷해 보이지만 각각 용도와 동작 방식이 다릅니다. 이 글에서는 세 함수의 문법, 예제 코드, 그리고 핵심적인 차이점까지 자세히 알아보겠습니다.
1. printf() 함수
printf() 함수는 화면(표준 출력)에 메시지와 변수의 값을 함께 출력할 때 사용되는 가장 기본적인 출력 함수입니다.
문법
printf(const char *str, ...);
예제 코드
#include<stdio.h>
int main() {
int a = 24;
printf("Welcome! \n");
printf("The value of a : %d", a);
getchar();
return 0;
}
실행 결과
Welcome! The value of a : 24
위 예제에서 볼 수 있듯이, printf()는 서식 지정자(%d 등)를 활용해 변수의 값을 원하는 형태로 화면에 바로 출력합니다.
2. sprintf() 함수
sprintf() 함수는 'string print'라는 이름 그대로 문자열 출력 함수라고 불립니다. 하지만 실제로는 화면에 출력하지 않고, 형식화된 문자열과 값들을 char 배열(버퍼)에 저장하는 것이 특징입니다.
문법
int sprintf(char *str, const char *string, ...);
예제 코드
#include<stdio.h>
int main() {
char buf[20];
int x = 15, y = 25, z;
z = x + y;
sprintf(buf, "Sum of values : %d", z);
printf("%s", buf);
return 0;
}
실행 결과
Sum of values : 40
이 예제에서 sprintf()는 두 변수의 합을 계산한 결과를 buf 배열에 문자열 형태로 저장한 후, 이후 printf()를 통해 한 번에 출력하고 있습니다. 즉, sprintf()는 결과물을 '만들어 저장'하는 역할을 담당합니다.
3. fprintf() 함수
fprintf() 함수는 'format print' 함수로 알려져 있으며, 출력 내용을 특정 파일 스트림(stream)에 기록합니다. 표준 출력(stdout) 콘솔이 아닌 파일 등 다른 대상에 형식화된 데이터를 출력할 때 사용됩니다.
문법
int fprintf(FILE *fptr, const char *str, ...);
예제 코드
#include<stdio.h>
int main() {
int i, x = 4;
char s[20];
FILE *f = fopen("new.txt", "w");
if (f == NULL) {
printf("Could not open file");
return 0;
}
for (i=0; i<x; i++) {
puts("Enter text");
gets(s);
fprintf(f,"%d.%s\n", i, s);
}
fclose(f);
return 0;
}
실행 결과 (콘솔)
Enter text Hello world! Enter text Demo
프로그램 실행 후 "new.txt" 파일에는 다음과 같은 내용이 기록됩니다.
0.Hello world! 1.Demo
위 예제처럼 fprintf()는 사용자가 입력한 텍스트를 번호와 함께 파일에 순차적으로 저장합니다. 참고로 예제의 gets() 함수는 버퍼 오버플로우 위험이 있어 현대 C 프로그래밍에서는 안전한 fgets() 사용이 권장됩니다.
세 함수의 핵심 차이점 요약
| 함수 | 출력 대상 | 주요 용도 |
|---|---|---|
| printf() | 표준 출력(콘솔 화면) | 화면에 메시지와 변수 값 출력 |
| sprintf() | char 배열(버퍼) | 형식화된 문자열을 메모리에 저장 |
| fprintf() | 파일 스트림(FILE *) | 파일 등 스트림에 형식화된 데이터 기록 |
정리하면, 세 함수 모두 같은 방식으로 서식 지정자를 사용하지만 결과물이 향하는 곳이 다르다는 점이 핵심입니다. 화면 출력에는 printf(), 문자열 조합에는 sprintf(), 파일 기록에는 fprintf()를 사용하는 것이 올바른 선택입니다.