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"]필드폭을 같이 쓰세요. 널 문자가 들어갈
자료가 고정폭이 아니기 때문에 다음 처럼 되더군요. ㅡ,ㅡ;;;
** 결과
p1 : 1234
p2 : 56 <-- "9876"이 출력되야 하는데...
그렇군요. source 문자열을 만들 때부터 토큰별로 자르는 과정이 필요
그렇군요. source 문자열을 만들 때부터 토큰별로 자르는 과정이 필요하겠네요.
나중에 보니 제가 주제를 잘못 파악했군요.. 쪽팔려서 지우고 갑니다.
나중에 보니 제가 주제를 잘못 파악했군요.. 쪽팔려서 지우고 갑니다.
:oops:
언제나 시작
이렇게 하시면 어떨까요...
복습하다가 검색해서 댓글 달고 갑니다.
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!
----------------------------------------------------------------------------------------
댓글 달기