프로그래밍/C2012. 3. 28. 11:40

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
Posted by code cat