EN JA
STRTOK(3)
STRTOK(3) FreeBSD Library Functions Manual STRTOK(3)

名称

strtok, strtok_r文字列のトークン

ライブラリ

Standard C Library (libc, -lc)

書式

#include < 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 が指定されるべきです。同じ文字列からさらにトークンを得たい続く呼び出しは、代わりに NULL ポインタを渡すべきです。セパレータの文字列 sep は、毎回供給されなければならず、呼び出し間に変更できます。

あたかも strtok() を呼び出すライブラリ関数がないように振る舞います。

strtok_r() 関数は、 strtok() の再入可能 (リエントラント) なバージョンです。コンテキストポインタ last は、各呼び出しで提供されなければなりません。また、 strtok_r() 関数は、個別のコンテキストポインタが使用されている限り、お互いの内側で 2 つの解析ループを入れ子にするために使用されます。

strtok() と strtok_r() 関数は、トークン自体を ヌル 文字で置き換えた後に、文字列のそれぞれの続くトークンの始まりへのポインタを返します。これ以上トークンが残らないとき、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); 
    } 
}

規格

strtok() 関数は、 ISO/IEC 9899:1990 (“ISO C90”) に適合しています。

作者

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

FreeBSD 3.0 の実装に基づいています。

バグ

System V の strtok() は、デリミタ (区切り) 文字だけを含んでいる文字列を渡されたなら、異なる (または空の) デリミタの文字列付けて strtok() を呼び出すことが、 NULL 以外の値を返すことができるように、次の開始点を変更しません。この実装は、次の開始点を常に変更するので、そのような呼び出しのシーケンスは、常に NULL を返します。
November 27, 1998 FreeBSD