ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • sscanf와 sprintf에 대해서 알아보자
    C_C++ 프로그래밍 2019. 6. 4. 19:58


    개발 환경

     OS

     Ubuntu 18.04.2

     컴파일러

     gcc version 7.4.0 (Ubuntu 7.4.0-1ubuntu1~18.04)




    sscanf

    int sscanf(const char *str, const char *format, ...)

    sscanf를 간단하게 예시를 들면

    str = "Welcome my home";

    sscanf(str, "%s%s", str1, str2);

    str에 저장된 문자열을 str1과 str2에 따로따로 입력을 한다는 의미이다.

    str1 = "Welcome"

    str2 = "my"를 가지게 된다.

    이때 format을 정해주어 문자열인지 숫자인지 따로 따로 정할 수 있다. (알파벳 대문자 소문자 등등...)


    sprintf

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

    이번에는 sprintf를 간단하게 예시를 들겠다.

    char str1[20] = "Welcome";

    char str2[20] = "rojae";

    sprintf(str, "%s%s", str1, str2);

    str1과 str2를 format에 맞추어 str에 출력한다는 의미이다.

    str = "Welcomerojae"를 가지게 된다.


    format (형식 태그)

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

    형식 태그는 예제를 보면서 이해하면 쉽다.

    %d %s는 숫자 문자형

    [^,]는 ,(콤마)로 구별하는 문자를 말한다.



    소스코드

    sscanf_test.c

    #include<stdio.h>

    struct monster_container{
            int level;
            int hp;
            int speed;
            char name[16];
            char text[32];
    };

    const char *monster_format = "%d, %d, %d, %[^,], %[^,]";

    int main(int argc, char **argv){
        struct monster_container slime1;
       
        char *slime_data = "5,50,3,Slime,Come on i kill you";
       
        sscanf(slime_data,monster_format, &slime1.level, &slime1.hp, &slime1.speed, slime1.name, slime1.text);
       
        printf("Name  : %s\n", slime1.name);
        printf("level : %d\n", slime1.level);
        printf("speed : %d\n", slime1.speed);
        printf("hp      : %d\n", slime1.hp);
        printf("txt      : %s\n", slime1.text);
       
        return 0;
    }   


    sprint_test.c

    #include<stdio.h>

    int main(int argc, char **argv){
            char buffer[20] = ("Welcome! I am rojae!");
            char str[10];
            char str1[10];
            char str2[10];

            sscanf(buffer, "%s%s", str1, str2);
            // buffer에 저장된 문자열을 따로 따로 입력받는다.
            sprintf(str, "%s%s", str1, str2);
            // str 배열에 str1, str2을 넣는다 (출력한다);

            printf("%s\n%s\n%s", str1, str2, str);
            return 0;
    }




    실행결과

    sscanf_test.c

     sprint_test.c


     


    ※ 본 글은 개인 포트폴리오 혹은 공부용으로 사용하기 때문에, 무단 복사 유포는 금지하지만, 개인 공부 용도로는 얼마든지 사용하셔도 좋습니다




    반응형
Designed by Tistory.