strtok

読み:ストリ・トークン
読み:ストリ・トック
外語:strtok 英語
品詞:名詞

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

目次

#include <string.h>

char *strtok(char *str, const char *delim);

標準Cライブラリに含まれる、文字列操作関数の一つ。

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

問題点

この関数は構文解析などの手間を省いてくれるが、使用するかどうか自体を含めた検討が必要である。

  • 関数は、最初の引数 char *str の文字列を変更する (デリミター部分を NUL 文字に書き換える)
  • つまり const な文字列に対しては使用できない (一旦 const でない場所に複写する必要がある)
  • また、char *str から、区切り文字は消滅する
  • 一つの解析が終わると、次に処理するポインターを静的変数に保持するため、スレッドセーフではない

これら問題点を許容した上で、再入不可能なこと、またはスレッドセーフではないことが問題となる場合は、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 と全く同じであることが分かる。

用語の所属
C
関連する用語
トークン (情報処理)

コメントなどを投稿するフォームは、日本語対応時のみ表示されます


KisoDic通信用語の基礎知識検索システム WDIC Explorer Version 7.04a (27-May-2022)
Search System : Copyright © Mirai corporation
Dictionary : Copyright © WDIC Creators club