'sprintf'에 해당되는 글 2건

  1. 2012.04.03 sprintf 사용법
  2. 2012.03.28 sscanf 사용법
프로그래밍/C2012. 4. 3. 20:46

sscanf에 이어 이번에는 sprintf의 사용법에 대해서 알아보자 (sscanf에 대한 사용법은 여기를 참조http://codecat.tistory.com/entry/sscanf-사용법)

 

sprintf는 man page에 다음과 같이 선언되어 있다.

 

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


 

sscanf 사용법에서, scanf가 standard input stream, stdin, 에서 input을 읽어오는 반면, sscanf는 str이라는 문자열(character string)에서 입력을 받아온다라고 했는데, sprintf 또한 input<->output이라는 점만 제외하면 이와 유사하다.

 

즉 printf가 standard output stream, stdout에 output을 출력한다면, sprintf는 str이라는 문자열에 출력을 한다고 생각하면 된다.

 

sscanf 사용법에 썼던 예제를 다시 한번 보면, (예제출처: 초보자를 위한 Linux & Unix C 프로그래밍)

sprintf(buff1, "%d", i) 라는 부분이 있다.  이는 위에서 이미 정의된 i를 %d에 맞게 buff1에 출력(저장이라고 보는게 맞겠다)한다고 보면 된다.  (포맷에 관련해서는 sscanf 사용법을 참조하자.)

 

그럼 이걸 언제 써먹냐면은... 물론 여러가지 용도가 있겠지만, 대표적으로 생각나는게 여러가지 옵션을 모아서 하나의 커맨드를 만들어서 실행시킬 때 사용할 수 있겠다. 

 

다음과 같이 실행 커맨드와 옵션들을 긁어 모아서 system()으로 한방에 실행시킬 수 있다.

sprintf(cmd_buf, "%s %s %s", cmd_exec, opt1, opt2);
system(cmd_buf);
Posted by code cat
프로그래밍/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