[C/C++] sprintf, snprintf

두비니

·

2021. 3. 4. 23:03

 

 

 

 

 

맨날 공부해놓고 맨날 까먹어서 답답해서 쓰는 글입니다

 

 

침 조 씨 조 아

 

 

 

sprintf/snprintf의 원형

우선 sprintf, 그리고 snprintf의 원형을 봅시다.

 

int sprintf  (char *buffer, const char *format, ...)
int snprintf (char *buffer, int buf_size, const char *format, ...)
  • 필요헤더: stdio.h
  • 파라미터:
    1. *buffer : 버퍼 변수
    2. buf_size : 가져올 크기(snprintf만 해당)
    3. *format : 포멧
  • 리턴값 : 문자열의 길이

 

 

대충 printf와 비슷한 느낌인데 뭐가 다르냐면 buffer 변수에 형식에 따라 만들어진 문자열이 저장된다는 점이 다릅니다. 

비교를 하자면 printf는 화면에 출력하고, sprintf는 buffer에만 출력해서 buffer에 저장되는 식입니다.

 

 

 

sprintf/snprintf를 쓰는 이유

왜 이런 형식을 사용하냐구요? sprintf를 사용하는 이유 중 하나는 int형의 정수를 쉽게 char * , 스트링형식으로 전환할 수 있습니다. 예시를 봅시다.

 

#include <stdio.h>

int main(){
	int a=10, b=20;
    char buffer[4];
    sprintf(buffer, "%d%d", a, b);
    printf("%s", buffer);
    
    return 0;
}

 

다음같은 코드를 실행할 경우, 1020이 출력되는 것을 볼 수 있습니다. 이런식으로 주로 쓰인다고 합니다. 

to_string과 itoa등 다른 함수들도 있지만, stdio.h에 포함되어있는 표준 함수는 sprintf가 끝이라고 하네요.

 

 

 

참고 : www.ibm.com/support/knowledgecenter/ko/ssw_ibm_i_73/rtref/snprintf.htm