sscanf는 manpage에 다음과 같이 정의되어 있다.
#include <stdio.h>
int sscanf(const char *str, const char *format, ...);
scanf가 standard input stream, stdin, 에서 input을 읽어오는 반면, sscanf는 str이라는 문자열(character string)에서 입력을 받아온다즉, 메모리에서(const char *str) 받은 값을 포맷 형식에 맞게 읽어오는 것이다.
간단한 예제를 보자.
예제출처: 초보자를 위한 Linux & Unix C 프로그래밍
위의 예제에서는 이미 정의되어 있는 값을 sprintf를 이용해 buff에 넣어두었다가, sscanf를 통해 포맷에 맞게 읽어오는 예제이다.
가끔 이 포맷으로 간편한 작업을 해낼 수도 있는데, 다음의 예제를 보면,
예제출처: Microsoft Support @http://support.microsoft.com/kb/38335/eng
sscanf를 이용해서 내부 버퍼에서 ','(컴마)로 문자를 잘라서 읽어오는 것이다. (이렇게 하기 위해서 필요한 포맷은 %[^',']이다) 물론 일반적인 토큰화를 해야 한다면 strtok을 사용하는 걸 추천한다.
말 나온 김에 포맷에 대해서 정리해 보자.
%o |
8진 정수 |
%d |
10진 정수 |
%ld |
long형 10진 정수 |
%x |
16진 정수 |
%f |
float 형 |
%lf |
double 형 |
%c |
문자 |
%s |
문자열 |
%n |
읽은 문자 갯수 |
주의 할 점은 포맷을 잘못 사용 할 경우, 이어지는 모든 데이터가 다 틀어지게 된다는 것이다. sscanf를 사용해서 받은 값이 이상하거나 할 때는, 포맷을 제대로 썼는지 확인하자.
'프로그래밍 > C' 카테고리의 다른 글
정적 라이브러리, 동적 라이브러리 만들기 (0) | 2012.04.04 |
---|---|
sprintf 사용법 (0) | 2012.04.03 |
exit(1) vs exit(EXIT_FAILURE) (0) | 2012.02.29 |
file에서 읽어와 strtok을 이용해 struct에 저장하기 (2) | 2012.02.28 |
C의 역사 (0) | 2012.02.19 |