본문 바로가기
C_C++ 프로그래밍

sscanf와 sprintf에 대해서 알아보자

by RoJae 2019. 6. 4.


개발 환경

 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


 


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




반응형

댓글