-
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
※ 본 글은 개인 포트폴리오 혹은 공부용으로 사용하기 때문에, 무단 복사 유포는 금지하지만, 개인 공부 용도로는 얼마든지 사용하셔도 좋습니다
반응형'C_C++ 프로그래밍' 카테고리의 다른 글
epoll 함수와 구조체에 대해서 알아보자 (0) 2019.06.08 fseek와 lseek 사용 정리 +ftell (0) 2019.06.06 pthread_mutex_init (뮤텍스 사용하기!) (0) 2019.05.25 pthread_attr 사용 (pthread_detach 없이 자원 반납하기) (0) 2019.05.25