STRTOK(3)

명칭
strtok, strtok_r - 캐릭터 라인의 토큰

프로그램 라이브러리
libc

서식
<string.h> char * strtok(char *str, const char *sep) char * strtok_r(char *str, const char *sep, char **last)

해설
이 인터페이스는 strsep(3) 에 의해 옮겨놓을 수 있었습니다.

strtok() 함수는, 눌로 종단 된 캐릭터 라인 str 안의 연속하는 토큰을 분할하기 위해서 이용됩니다. 이러한 토큰은, 그 캐릭터 라인내에서 sep 안의 캐릭터의 적어도 1 개(살)에 의해 구분되고 있습니다. 최초로 strtok() (을)를 호출할 때는, str (을)를 지정할 필요가 있습니다. 같은 캐릭터 라인으로부터 한층 더 토큰을 취득하기 위해서 계속되어 호출할 때는, 대신에 하늘 포인터를 건네줄 필요가 있습니다. separator 캐릭터 라인 sep (은)는 매회 주지 않으면 안됩니다, 호출마다 변경해도 상관하지 않습니다.

프로그램 라이브러리는, 실장상, 다른 프로그램 라이브러리 함수가 strtok() (을)를 호출하거나 하지 않는 것처럼 동작합니다.

strtok_r() 함수는 strtok() 의 재입 가능한 버젼입니다. 문맥 포인터 last (은)는, 호출마다 주지 않으면 안됩니다. strtok_r() (은)는, 다른 문맥 포인터가 사용되고 있는 한에서는, 서로의 내부에서 2 개의 퍼스 루프를 상자로 하기 위해서(때문에)도 사용할 수 있습니다.

strtok() 및 strtok_r() 함수는, 그 토큰 자체를 NUL 캐릭터로 옮겨놓은 후, 캐릭터 라인의 다음의 토큰의 선두에의 포인터를 돌려줍니다. 토큰이 없어지면(자), NULL 포인터를 돌려줍니다.

예
다음의 예에서는, 다른 문맥을 사용해 2 개의 캐릭터 라인을 퍼스 하기 위해서 strtok_r() (을)를 사용하고 있습니다:

    char test[80], blah[80];
    char *sep = "\\/:;=-";
    char *word, *phrase, *brkt, *brkb;
    strcpy(test, "This;is.a:test:of=the/string\\tokenizer-function. ");
    for (word = strtok_r(test, sep, &brkt);
         word;
         word = strtok_r(NULL, sep, &brkt))
    {
        strcpy(blah, "blah:blat:blab:blag");
        for (phrase = strtok_r(blah, sep, &brkb);
             phrase;
             phrase = strtok_r(NULL, sep, &brkb))
        {
            printf("So far we're at %s:%s\n", word, phrase);
        }
    }

참조
memchr(3), strchr(3), strcspn(3), strpbrk(3), strrchr(3), strsep(3), strspn(3), strstr(3)

표준
strtok() 함수는, isoC 에 적합하고 있습니다.

버그
System V 의 strtok() (은)는, 단락 캐릭터만으로부터 되는 캐릭터 라인을 건네받았을 경우는, 다음의 개시점을 변경하지 않습니다. 다른 (또는 하늘의) 단락 캐릭터 라인을 사용했다 strtok() 의 호출로, NULL 이외의 값을 돌려줄 수 있도록(듯이) 하기 (위해)때문입니다. 이 실장에서는 항상 다음의 개시점을 변경하므로, 그러한 호출이 계속될 때는 항상 NULL (을)를 돌려주게 됩니다.

저자
Wes Peters, Softweyr LLC: <wes@softweyr.com>

FreeBSD 3.0 에서의 실장에 근거합니다.