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

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

· 댓글 0 · 바다야크

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
]$
💬 댓글 0

이름을 저장합니다.

최근글 thumbnail 로지텍 마우스 추천 무소음 무선 마우스 로지텍 M331 thumbnail 갤럭시 핸드폰 속도 빠르게 설정하는 방법 thumbnail 구글 스프레드 시트 앱스 스크립트 실행 방법 thumbnail 오리코 SSD 케이스 ORICO-M2 NVMe SSD 인클로저 사용후기 thumbnail 윈도우10·11 악성 소프트웨어 제거 도구 thumbnail C언어 날짜 시간 문자열 분리 팁 thumbnail 오닉스 포크3 구글 키보드 설치 방법 (1) thumbnail 전자책 오닉스 포크3 구글 플레이 스토어 설치 방법
좋은 글 읽고 따라했으나 며⋯ 💬ㅇㅇ 해상도가 높은 모니터에서 말⋯ 💬바다야크 당연히 안되지요. 더 이상 공⋯ 💬ㅇㅇ 안녕하세요 좋은 프로그램 만⋯ 💬프로듀사1600 저의 글이 도움을 드렸다니⋯ 💬바다야크