본문으로 바로가기
homeimage
  1. Home
  2. 컴퓨터/프로그래밍
  3. C언어 메모리 영역으로 크기만큼 서식에 맞추어 문자열 출력 함수 snprintf()

C언어 메모리 영역으로 크기만큼 서식에 맞추어 문자열 출력 함수 snprintf()

· 댓글개 · 바다야크

C snprintf() 메모리 영역으로 크기만큼 서식에 맞추어 문자열 출력 함수

메모리 영역으로 서식에 맞추어 출력합니다. snprintf()는 매우 안전한 함수로 지정한 길이에 해당하는 위치에 반드시 NULL문자를 삽입해 줍니다. 즉, 버퍼 크기가 10이고 snprintf()에 버퍼 크기 10으로 요청하면 변환되는 문자열이 버퍼 크기보다 크다고 해도 9개의 문자를 입력해 준 다음 10번째에 NULL이 대입됩니다. 즉, 버퍼 크기를 정확히 알려주면 오버플로우가 발생하지 않습니다.

  • 헤더: stdio.h
  • 형태: int snprintf( char *s , size_t size, const char *format, ...)
  • 인수: char *s 서식에 맞추어 저장할 메모리 영역의 포인터
    size_t size 출력할 문자 개수
    const char *format 출력할 데이터 서식
    ... 서식에 맞춘 변수 나열
  • 반환: int NULL까지의 크기가 아니라 실제로 변환에 필요한 길이. 오류가 발생하면 음수를 반환합니다.

서실 변환 문자열

변환 문자열 의미
%o 8진 정수 형식으로 입력
%d 10진 정수 형식으로 입력
%ld long형 10진 정수 형식으로 입력
%x 16진 정수 형식으로 입력
%f float 형 형식으로 입력
%lf double 형 형식으로 입력
%c 문자 형식으로 입력
%s 문자열 형식으로 입력

서식 문자열에 옵션을 추가하여 좀 더 다양하게 출력할 수 있습니다.

변환 문자열 출력 의미
printf("%d", 123) 123 표준 출력장치로 출력
printf("%5d", 123) ___123 10진수를 5자리에 맞추어 출력, 123앞에 공백 2개 추가
printf("%-5d", 123) 123__ 10진수를 5자리에 맞추어 출력, 왼쪽 맞춤, 오른쪽에 공백 추가
printf("%f", 1.234567) 1.234567 16진 정수 형식으로 출력
printf("%4f", 1.234567) 1.2346 소쉄 이하 4자리 출력, 반올림
printf("%7.2f", 1.234567) ___1.23 소숫점 포함해서 전체 7자리, 소수점 이하 2자리. 공백 3개가 앞 부분에 추가됩니다.
printf("%s", "badayak.com") badayak.com 문자열 출력
printf("%20s", "badayak.com") _________badayak.com 문자열 출력
printf("%7s", "badayak.com") badayak.com 문자열이 더 길면 그대로 출력
printf("%.7s", "badayak.com") badayak 문자열이 더 길면 잘라서 출력(%7s)
printf("%-20s", "badayak.com") badayak.com_________ 문자열을 왼쪽 맟춤으로 하여 오른쪽에 모자르는 자리를 공백으로 메꿈
printf("%10.2s", "badayak.com") ________by 문자열 앞의 두 문자만 출력하되 앞에 공문자를 채워서 전체 10 문자로 출력
printf("%10.2s", "badayak.com") by________ 문자열 앞의 두 문자만 출력하되 뒤에 공문자를 채워서 전체 10 문자로 출력

C언어 snprintf() 함수 예제

#include <stdio.h>
#include <string.h>

int main( void)
{
   char  buf[1024];
   int   ret;

   bzero( buf, sizeof( buf));
   ret   = snprintf( buf, 10, "%d %x %s", 123, 123, "badayak.com");
   printf( "ret=%d buf=[%s]\n", ret, buf);

   for ( int ndx = 0; ndx < 15; ndx++){
      printf( "%d]%02x ", ndx, buf[ndx] & 0xff);
   }
   printf( "\n");
   return 0;
}

C언어 snprintf() 예제 실행 결과

]$ ./a.out
ret=18 buf=[123 7b ba]
0]31 1]32 2]33 3]20 4]37 5]62 6]20 7]62 8]61 9]00 10]00 11]00 12]00 13]00 14]00
]$
SNS 공유하기
💬 댓글 개
최근글
이모티콘창 닫기
울음
안녕
감사해요
당황
피폐

이모티콘을 클릭하면 댓글창에 입력됩니다.