strtok, strtok_r
— string tokens
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);
The
strtok()
function is used to isolate sequential tokens in a null-terminated string,
str. These tokens are separated in the string by at
least one of the characters in sep. The first time
that strtok() is called, str
should be specified; subsequent calls, wishing to obtain further tokens from
the same string, should pass a null pointer instead. The separator string,
sep, must be supplied each time, and may change
between calls.
The implementation will behave as if no library
function calls
strtok().
The
strtok_r()
function is a reentrant version of strtok(). The
context pointer last must be provided on each call.
The strtok_r() function may also be used to nest two
parsing loops within one another, as long as separate context pointers are
used.
The strtok() and
strtok_r() functions return a pointer to the
beginning of each subsequent token in the string, after replacing the token
itself with a NUL character. When no more tokens
remain, a null pointer is returned.
The following uses strtok_r() to parse two
strings using separate contexts:
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);
}
}
The strtok() function conforms to
ISO/IEC 9899:1990 (“ISO C90”).
The strtok_r() function conforms to
IEEE Std 1003.1-2001 (“POSIX.1”).
Wes Peters
<wes@softweyr.com>,
Softweyr LLC
Based on the FreeBSD 3.0
implementation.
The System V strtok(), if handed a string
containing only delimiter characters, will not alter the next starting
point, so that a call to strtok() with a different
(or empty) delimiter string may return a non-NULL
value. Since this implementation always alters the next starting point, such
a sequence of calls would always return NULL.