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

名称

strsep文字列を分離する

ライブラリ

Standard C Library (libc, -lc)

書式

#include < string.h>

char *
strsep( char **stringp, const char *delim);

解説

strsep() 関数は、 *stringp によって参照される文字列中の、文字列 delim (または終端の‘ \0’) の最初に出現するあらゆる文字に位置づけし、それを‘ \0’で置き換えます。デリミタ (区切り) 文字の後ろの次の文字の位置 (または文字列の終りに到達したなら、NULL) が、 *stringp に格納されます。 *stringp の元の値が、返されます。

“空”のフィールド (すなわち、文字列 delim 中の文字は、 *stringp の最初の文字として現れます) は、返された‘ \0’へのポインタによって参照される位置を比較することによって検出することができます。

*stringp が最初に NULL であるなら、 strsep() は、 NULL を返します。

使用例

次は、文字列を解析するために strsep() を使用して、各トークンを個別の行に印刷 (表示) します:

char *token, *string, *tofree; 
 
tofree = string = strdup("abc,def,ghi"); 
assert(string != NULL); 
 
while ((token = strsep(&string, ",")) != NULL) 
 printf("%s\n", token); 
 
free(tofree);

次は、空白類で区切られたトークンを含む文字列を引数ベクタに解析するために、 strsep() を使用します:

char **ap, *argv[10], *inputstring; 
 
for (ap = argv; (*ap = strsep(&inputstring, "\t")) != NULL;) 
        if (**ap != '\0') 
                if (++ap >= &argv[10]) 
                        break;

歴史

strsep() 関数は、 strtok() 関数のための置換を目的としています。 strtok() 関数は、移植性の理由 (それは、 ISO/IEC 9899:1990 (“ISO C90”)) に適合しています) で好まれるはずですが、それは、空のフィールドを扱うことができません、すなわち、 2 つの隣接したデリミタ文字によって区切られるフィールドを検出するか、または一度に単一の文字列を越えるために使用されることです。 strsep() 関数は、 4.4BSD ではじめて登場しました。
December 5, 2008 FreeBSD