출처 - http://itguru.tistory.com/66 

 

sprintf

#include <stdio.h> // C++ 에서는 <cstdio>

int sprintf ( char * str, const char * format, ... );



str 에 데이터를 형식에 맞추어 쓴다.
str 가 가리키는 배열에 형식 문자열에 지정한 방식 대로 C 문자열을 쓴다. 쉽게 설명하자면, printf 에서 화면에 출력하는 대신에 화면에 출력할 문자열을 인자로 지정한 문자열에 쓴다는 것이다. 이 때, 인자로 지정한 배열의 크기는 배열에 쓰여질 문자열의 크기 보다 커야만 한다. 주의할 점은 sprintf 함수는 자동적으로 str 맨 마지막에 NULL  문자를 붙이기 때문에 항상 한 칸의 여유가 있어야 한다.

   인자
 

str

C 문자열이 저장될 char 배열을 가리키는 포인터

 
format

위 str 에 쓰여질 문자열을 포함하는 형식 문자열으로, 이는 형식 태그를 포함할 수 있다. 이 때, 형식 태그는 부수적 인자로 지정한 데이터와 치환되어 쓰여지게 된다. 이 때, 데이터가 치환되는 방식은 형식 태그에 의해 좌우된다. 따라서 부수적 인자의 개수는 적어도 형식 문자열에 사용된 형식 태그의 수 보다 많아야 한다.

  • 형식 태그는 아래와 같이 생겼다.

  • %[플래그(flag)][폭(width)][.정밀도][크기(length)]서식 문자(specifier)

  • 이 때 서식 문자(specifier) 는 대응하는 인자를 어떠한 형태로 표현할지를 결정하는데에 가장 중요한 역할을 한다.

  • 서식문자 출력 형태

    c 문자
    a
    d or i 부호 있는 십진법으로 나타난 정수 392
    e 지수 표기법(Scientific notation) 으로 출력하되, e 문자를 이용한다.
    3.9265e+2
    E 지수 표기법(Scientific notation) 으로 출력하되, E 문자를 이용한다. 3.9265E+2
    f 십진법으로 나타낸 부동 소수점 수
    392.65
    g %e 나 %f 보다 간략하게 출력 392.65
    G %E 나 %f 보다 간략하게 출력 392.65
    o 부호 있는 팔진수
    610
    s 문자열
    sample
    u 부호없는 십진법으로 나타낸 정수
    7235
    x 부호없는 16 진법으로 나타낸 정수 (소문자 사용)
    7fa
    X 부호없는 16 진법으로 나타낸 정수 (대문자 사용)
    7FA
    p 포인터 주소
    B800:0000
    n 아무것도 출력하지 않는다. 그 대신, 인자로 부호 있는 int 형을 가리키는 포인터를 전달해야 되는데, 여기에 현재까지 쓰여진 문자 수가 저장된다.
    % % 다음에 %를 또 붙이면 stdout 에 % 를 출력한다.

  • 위 서식 문자를 이용한 다양한 출력 형태는 아래와 같다.

  • #include <stdio.h>
    int main()
    {
        int integer = 123;
        char character = 'c';
        char string[] = "hello, world";
        int* pointer = &integer;
        double pi = 3.141592;
        char buf[100];
        

        sprintf(buf, "integer : (decimal) %d (octal) %o \n", integer, integer);
        printf("%s \n", buf);

        sprintf(buf,"character : %c \n", character);
        printf("%s \n", buf);

        sprintf(buf,"string : %s \n", string);
        printf("%s \n", buf);

        sprintf(buf,"pointer addr : %p \n", pointer);
        printf("%s \n", buf);

        sprintf(buf,"floating point : %e // %f \n", pi, pi);
        printf("%s \n", buf);

        sprintf(buf,"percent symbol : %% \n");
        printf("%s \n", buf);

        return 0;

  • 출력 결과

  • + Recent posts