이름
strtok, strtok_r - 문자열에서 토큰들을 뽑아낸다.
사용법
#include <string.h>
char *strtok(char *s, const char *delim);
char *strtok_r(char *s, const char *delim, char **ptrptr);
예제를 보면 아래처럼 쉽게 테스트할 수 있다.
==============================
#include#include #include int main() { char *temp = "/home/test/HISTORY/history/test_file"; char *aa, buf[256]; strncpy(buf, temp, sizeof(buf)); printf("before strtok : %s\n", buf); aa = strtok(buf, "/"); printf("after strtok :%s\n", buf); printf("result : %s\n", aa); return 0; }
==============================
위의 함수를 실행한 결과는 아래처럼 나온다.
$ ./a.out
before strtok : /home/test/HISTORY/history/test_file
after strtok :/home
result : home
딜리미터로 슬래쉬 '/'를 썼는데
슬래쉬가 2번째 나타나는 부분 이전까지 잘리는 것을 볼 수 있다.
그리고 return 하는 char 포인터는
첫번째 '/'의 다음을 가리키고 있다.
strtok 함수의 실제 코드를 뜯어보면 아래와 같다.
출처 : http://opensource.apple.com/source/Libc/Libc-167/string.subproj/strtok.c
======================================
#include#include char * strtok(s, delim) register char *s; register const char *delim; { register char *spanp; register int c, sc; char *tok; static char *last; if (s == NULL && (s = last) == NULL) return (NULL); /* * Skip (span) leading delimiters (s += strspn(s, delim), sort of). */ cont: c = *s++; for (spanp = (char *)delim; (sc = *spanp++) != 0;) { if (c == sc) goto cont; } if (c == 0) { /* no non-delimiter characters */ last = NULL; return (NULL); } tok = s - 1; /* * Scan token (scan for delimiters: s += strcspn(s, delim), sort of). * Note that delim must have one NUL; we stop if we see that, too. */ for (;;) { c = *s++; spanp = (char *)delim; do { if ((sc = *spanp++) == c) { if (c == 0) s = NULL; else s[-1] = 0; last = s; return (tok); } } while (sc != 0); } /* NOTREACHED */ }
======================================
반응형
'Language > C' 카테고리의 다른 글
strdup 함수 예제 (476) | 2012.08.14 |
---|---|
getutxent 함수 예제 (3681) | 2012.08.13 |
writev 함수 예제 (472) | 2012.07.31 |
readv 함수 예제 (480) | 2012.07.30 |
poll 함수 예제 (150) | 2012.07.26 |