strtok
読み:ストリ-トークン
外語:strtok

 Cで、文字列からトークンを取り出すための関数。
目次

書式
 #include <string.h>
 char *strtok(char *str, const char *delim);

概要
 標準Cライブラリに含まれる、文字列操作関数の一つ。
 入力した文字列(C標準のASCIIZ形式)から、指定した文字をデリミター(区切り文字)で区切って返す。一回の呼び出して一つを返すが、関数自体がどこまで処理したかを覚えているため、連続して呼び出すと順次、2番目、3番目…の結果を返す。

特徴

問題点
 この関数は構文解析などの手間を省いてくれるが、使用するかどうか自体を含めた検討が必要である。
 これら問題点を許容した上で、再入不可能なこと、またはスレッドセーフではないことが問題となる場合は、strtok_r() 関数が利用できる。

定義
 Bionicでは、次のように実装されている。
 bionic/libc/include/string.h
extern char*  strtok(char* __restrict, const char* __restrict);
 bionic/libc/string/strtok.c
char *
strtok(char *s, const char *delim)
{
    static char *last;

    return strtok_r(s, delim, &last);
}
 状態を保持するための変数を静的変数で確保している。それ以外の処理自体は strtok_r と全く同じであることが分かる。

再検索