snprintf( )
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)은 원래 저장하려던 전체 문자열 길이(널문자 제외)를 반환합니다.