[C]printf & sprintf & fprintf
- printf함수는 데이터를 stdout(콘솔출력)으로 형식에 맞추어 출력하는 함수입니다.
- sprintf함수는 데이터를 str(문자열 버퍼)에 형식에 맞추어 쓰는 함수입니다.
- fprintf함수는 데이터를 형식에 맞추어 스트림에 쓰는 함수입니다.
1️⃣ 함수원형
< printf >
int printf(const char* restrict format, ...);
< sprintf >
int sprintf(char* restrict dst, const char* restrict format, ...);
< fprintf >
int fprintf(FILE* stream, const char *format, ...);
2️⃣ 헤더파일, 반환값
- 헤더파일: <stdio.h>
반환값:
성공 실패 printf 출력된문자 수(NULL문자 포함) 음수 sprintf 쓰여진 문자개수(NULL문자 미포함) 음수 fprintf 스트림에 쓰인 총 문자의 갯수 음수
3️⃣ 함수사용
(1) sprintf함수
int main(void)
{
char getdata[8];
char string[] = "hello ";
int num = 3;
sprintf(getdata, "%s%d", string, num);
printf("getdata: %s\n", getdata);
}
/*---출력---*/
getdata: hello 3
(2) fprintf함수
int main(void)
{
FILE *stream;
char string[] = "Hello!\nmy name is kirim";
int num = 1;
stream = fopen("test.txt", "wb");
fprintf(stream, "%d: %s", num, string);
fclose(stream);
}
< 작성된 test.txt >
my name is kirim
4️⃣ 특징 & 주의사항
sprintf
함수는 정말 많이쓰는 함수입니다. 심지어 C++에서string
클래스가 있는데도 많이 쓴다고 합니다.
(가장 빨리 문자열을 조작하는 함수는 C내장함수)- 버퍼의 크기를 충분하게 잡지않으면 버퍼오버플로우의 위험이 있습니다.
- C99에서 조금 더 안전한
snprintf함수
가 있습니다. printf함수
의 경우 stdout(출력스트림)의 형식으로 출력을 합니다.
5️⃣ 코드예시(특이케이스)
1.< sprintf함수로 int형정수 문자형정수로 변환하기 >
int main(void)
{
int num = 1234;
char result[5];
sprintf(result, "%d", num);
printf("%s\n", result); // "1234"로 정상 출력
printf("%s\n", (int)1234); // 컴파일오류(%s는 int형을 읽지못함을 표시)
}