char p[5];
char source[256]; // sufficient space to hold a tokenized string
while (fscanf(stdin, "%255s", source) == 1)
{
sscanf(source, "%4s", p);
printf("%s\n", p);
}
sscanf에서...
1. %4s에서 4는 %s로 읽을 character의 max length를 지정함
2. %s로 읽은 문자 배열을 자동으로 null termination시킴
3. *는 해당 포맷스트링으로 읽는 것을 저장하지 않고 버림(discard)함
4. %[^ ]는 scanset(표준임)으로 ' '(space) 문자가 나오기 전까지 문자열을 지칭함
(3에 의해 4번으로 읽은 문자열은 discard. 곧, 공백 전까지의 나머지 문자열을 버림)
5. %s로 읽는 것은 white space를 skip함. 따라서 공백 뒤의 문자부터 새로 읽음
보통은 파일에서 한 줄씩 읽어 파싱할 때, fgets와 sscanf면 충분하더군요.
proc 파싱할 때나, 자료구조를 파일에 읽고 쓸 때 유용하게 사용했습니다.
자세한 내용은 hyperhidrosis님이 예전에 올려주신 링크를 참조하심이..
-----------------------------------
Go to the U-City
----------------------------------------------------------------------------------------
Don't Feed the Trolls!
----------------------------------------------------------------------------------------
필드폭을 같이 쓰세요. 널 문자가 들어갈 1바이트를 고려해야 합니다.
필드폭을 같이 쓰세요. 널 문자가 들어갈 1바이트를 고려해야 합니다.
[quote="doldori"]필드폭을 같이 쓰세요. 널 문자가 들어갈
자료가 고정폭이 아니기 때문에 다음 처럼 되더군요. ㅡ,ㅡ;;;
#include <stdio.h> int main (int argc, char ** argv) { char p1[5]; char p2[5]; char source[] = "123456 9876"; sscanf(source, "%4s %4s", p1, p2); printf("p1 : %s\n", p1); printf("p2 : %s\n", p2); return 0; }** 결과
p1 : 1234
p2 : 56 <-- "9876"이 출력되야 하는데...
그렇군요. source 문자열을 만들 때부터 토큰별로 자르는 과정이 필요
그렇군요. source 문자열을 만들 때부터 토큰별로 자르는 과정이 필요하겠네요.
char p[5]; char source[256]; // sufficient space to hold a tokenized string while (fscanf(stdin, "%255s", source) == 1) { sscanf(source, "%4s", p); printf("%s\n", p); }나중에 보니 제가 주제를 잘못 파악했군요.. 쪽팔려서 지우고 갑니다.
나중에 보니 제가 주제를 잘못 파악했군요.. 쪽팔려서 지우고 갑니다.
:oops:
언제나 시작
이렇게 하시면 어떨까요...
#include <stdio.h> int main (int argc, char ** argv) { char p1[5]; char p2[5]; char source[] = "123456789 98765"; sscanf(source, "%4s%* %4s", p1, p2); printf("p1 : %s\n", p1); printf("p2 : %s\n", p2); return 0; }복습하다가 검색해서 댓글 달고 갑니다.
#include <stdio.h> int main(void) { char *src = "123456 987654"; char p1[5]; char p2[5]; sscanf(src, "%4s%*[^ ]%4s", p1, p2); printf("[%s] [%s]\n", p1, p2); return 0; }sscanf에서...
1. %4s에서 4는 %s로 읽을 character의 max length를 지정함
2. %s로 읽은 문자 배열을 자동으로 null termination시킴
3. *는 해당 포맷스트링으로 읽는 것을 저장하지 않고 버림(discard)함
4. %[^ ]는 scanset(표준임)으로 ' '(space) 문자가 나오기 전까지 문자열을 지칭함
(3에 의해 4번으로 읽은 문자열은 discard. 곧, 공백 전까지의 나머지 문자열을 버림)
5. %s로 읽는 것은 white space를 skip함. 따라서 공백 뒤의 문자부터 새로 읽음
보통은 파일에서 한 줄씩 읽어 파싱할 때, fgets와 sscanf면 충분하더군요.
proc 파싱할 때나, 자료구조를 파일에 읽고 쓸 때 유용하게 사용했습니다.
자세한 내용은 hyperhidrosis님이 예전에 올려주신 링크를 참조하심이..
-----------------------------------
Go to the U-City
----------------------------------------------------------------------------------------
Don't Feed the Trolls!
----------------------------------------------------------------------------------------
댓글 달기