함수 원형

int sprintf(char *buffer, const char *format, ...);

주요 사용 사례

1. 숫자를 문자열로 변환

#include <stdio.h>

int main() {
    char str[100];
    int num = 123;
    float pi = 3.14159;
    
    sprintf(str, "정수: %d", num);
    printf("%s\\n", str);  *// 출력: 정수: 123*
    
    sprintf(str, "실수: %.2f", pi);
    printf("%s\\n", str);  *// 출력: 실수: 3.14*
    
    return 0;
}

2. 여러 변수를 하나의 문자열로 조합

#include <stdio.h>

int main() {
    char result[200];
    char name[] = "김철수";
    int age = 25;
    float height = 175.5;
    
    sprintf(result, "이름: %s, 나이: %d세, 키: %.1fcm", name, age, height);
    printf("%s\\n", result);  
    *// 출력: 이름: 김철수, 나이: 25세, 키: 175.5cm*
    
    return 0;
}

3. 파일명 동적 생성

#include <stdio.h>

int main() {
    char filename[100];
    int year = 2024;
    int month = 12;
    int day = 25;
    
    sprintf(filename, "log_%04d%02d%02d.txt", year, month, day);
    printf("생성된 파일명: %s\\n", filename);  
    *// 출력: 생성된 파일명: log_20241225.txt*
    
    *// 여러 파일 생성*
    for(int i = 1; i <= 5; i++) {
        sprintf(filename, "data_file_%03d.csv", i);
        printf("%s\\n", filename);
    }
    *// 출력:// data_file_001.csv// data_file_002.csv// ...*
    
    return 0;
}

4. 16진수, 8진수 변환

#include <stdio.h>

int main() {
    char hex_str[50];
    char oct_str[50];
    int value = 255;
    
    sprintf(hex_str, "0x%X", value);  *// 대문자 16진수*
    sprintf(oct_str, "0%o", value);   *// 8진수*
    
    printf("10진수 %d = 16진수 %s = 8진수 %s\\n", 
           value, hex_str, oct_str);
    *// 출력: 10진수 255 = 16진수 0xFF = 8진수 0377*
    
    return 0;
}

주의사항

버퍼 오버플로우 위험

*// 위험한 코드*
char small_buffer[10];
sprintf(small_buffer, "This is a very long string that will overflow");
*// 버퍼 크기를 초과하여 메모리 오류 발생!// 안전한 대안: snprintf 사용*
char safe_buffer[10];
snprintf(safe_buffer, sizeof(safe_buffer), "This is a very long string");
*// 버퍼 크기만큼만 저장되고 나머지는 잘림*

C++에서의 대안

C++에서는 더 안전하고 편리한 방법들이 있습니다: