1. snprintf( )

더보기

1. snprintf 어원

: string + n + printf = 문자열(string)에 최대 n글자까지 포맷 출력(print formatted)

 

snprintf는 문자열 버퍼 크기를 지정해서

버퍼에 "안전하게" 포맷팅해서 저장하여

오버플로우 위험을 막기 위해 등장했습니다.

 

 

2. 함수 원형

int snprintf(char *str, size_t size, const char *format, ...);

 

  • str: 출력될 문자열을 저장할 버퍼(배열)
  • size: 버퍼의 전체 크기(바이트 단위, 널문자 포함)
  • format: 출력 형식(printf 스타일)
  • ...: 추가 인자(가변 인자)

 

 

 

2. 기본 사용 예시

더보기
#include <stdio.h>

int main() {
    char buffer[50];

    int n = 123;
    const char *name = "Alice";

    // 최대 49글자 + 널문자(\0)까지 버퍼에 저장
    int len = snprintf(buffer, sizeof(buffer), "이름: %s, 번호: %d", name, n);

    printf("출력 문자열: %s\n", buffer);
    printf("문자열 길이(널문자 제외): %d\n", len);

    return 0;
}
# 출력 문자열: 이름: Alice, 번호: 123
# 문자열 길이(널문자 제외): 18

 

 

 

3.  버퍼 길이보다 긴 경우 예시

더보기
#include <stdio.h>

int main() {
    char buffer[10];
    int len = snprintf(buffer, sizeof(buffer), "Hello, world!");

    printf("버퍼에 저장된 값: %s\n", buffer);
    printf("실제 필요한 길이: %d\n", len);

    return 0;
}
# 버퍼에 저장된 값: Hello, wo
# 실제 필요한 길이: 13

 

  • snprintf는 버퍼 크기(여기서는 10, 널문자 포함)를 초과하는 경우 잘라서 저장합니다.
  • 반환값(len)은 원래 저장하려던 전체 문자열 길이(널문자 제외)를 반환합니다.