sprintf 함수는 C 언어에서 문자열에 형식을 지정하여 데이터를 저장할 때 사용됩니다. printf와 비슷하지만, 결과를 표준 출력 대신 문자열 버퍼에 저장하는 점이 다릅니다. 문자열 처리, 로깅, 버퍼 생성 등에 매우 유용합니다.
1. sprintf 함수 기본 문법
#include <stdio.h>
int sprintf(char *str, const char *format, ...);
매개변수 설명:
- str: 결과 문자열을 저장할 버퍼의 포인터
- format: 출력 형식을 지정하는 문자열
- ...: 출력할 값들 (가변 인자)
반환 값:
- 생성된 문자열의 길이 (널 종료 문자를 제외한 길이)
2. 기본 사용 예제
#include <stdio.h>
int main() {
char buffer[50];
int age = 25;
float height = 175.5;
sprintf(buffer, "나이: %d세, 키: %.1fcm", age, height);
printf("%s\n", buffer);
return 0;
}
출력 결과:
나이: 25세, 키: 175.5cm
3. 주요 서식 지정자(format specifier)
서식 지정자 설명 예제 출력
%d | 정수 (10진수) | 42 |
%f | 실수 (부동소수점) | 3.141593 |
%.2f | 소수점 이하 2자리 | 3.14 |
%c | 단일 문자 | A |
%s | 문자열 | Hello |
%x / %X | 16진수 (소문자/대문자) | ff / FF |
%% | % 문자 출력 | % |
4. 고급 사용법
4.1. 다양한 데이터 형식 처리
char buffer[100];
int year = 2025;
char month[] = "February";
float temp = 23.7;
sprintf(buffer, "날짜: %s, 연도: %d, 온도: %.1f°C", month, year, temp);
printf("%s\n", buffer);
출력 결과:
날짜: February, 연도: 2025, 온도: 23.7°C
4.2. 너비(width)와 정렬
char buffer[100];
sprintf(buffer, "|%-10s|%10d|", "이름", 30);
printf("%s\n", buffer);
출력 결과:
|이름 | 30|
4.3. 여러 데이터의 결합
char buffer[100];
char firstName[] = "Alice";
char lastName[] = "Kim";
sprintf(buffer, "전체 이름: %s %s", firstName, lastName);
printf("%s\n", buffer);
출력 결과:
전체 이름: Alice Kim
5. sprintf 사용 시 주의할 점
- 버퍼 크기 초과 방지: sprintf는 버퍼 오버플로우를 방지할 수 없습니다. 더 안전한 대안으로 snprintf를 사용하는 것이 좋습니다.
- 널 종료 문자 처리: 함수는 자동으로 문자열 끝에 널 종료 문자를 추가합니다.
- 형식 지정자 일치: 형식 지정자와 전달된 데이터의 타입이 일치해야 합니다.
6. 실전 예제: 파일 경로 생성
#include <stdio.h>
int main() {
char path[100];
char directory[] = "/home/user";
char filename[] = "data.txt";
sprintf(path, "%s/%s", directory, filename);
printf("파일 경로: %s\n", path);
return 0;
}
출력 결과:
파일 경로: /home/user/data.txt
7. 결론
sprintf 함수는 형식을 지정하여 문자열을 생성할 때 매우 유용한 함수입니다. 다양한 데이터 형식을 하나의 문자열로 결합할 수 있으며, 안전한 메모리 처리를 위해 버퍼 크기를 신중히 고려하는 것이 중요합니다. sprintf를 적절히 사용하면 문자열 기반의 출력과 데이터 처리를 효과적으로 구현할 수 있습니다.
'Standard C' 카테고리의 다른 글
C 언어 fclose 사용법 완벽 가이드 (0) | 2025.02.22 |
---|---|
C 언어 clearerr 사용법 완벽 가이드 (0) | 2025.02.22 |
C 언어 BUFSIZ 사용법 완벽 가이드 (0) | 2025.02.22 |
C 언어 memcpy 사용법 완벽 가이드 (0) | 2025.02.22 |
C 언어 printf 사용법 완벽 가이드 (0) | 2025.01.18 |