NAME
strtok, strtok_r
—
string tokens
LIBRARY
library “libc”
SYNOPSIS
#include
<string.h>
char *
strtok
(char
* restrict str, const
char * restrict sep);
char *
strtok_r
(char
*str, const char
*sep, char
**lasts);
DESCRIPTION
Thestrtok
()
function is used to isolate sequential tokens in a nul-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
strtok
()
function returns a pointer to the beginning of each subsequent token in the
string, after replacing the separator character itself with a
NUL
character. Separator characters at the beginning
of the string or at the continuation point are skipped so that zero length
tokens are not returned. When no more tokens remain, a null pointer is
returned.
The
strtok_r
()
function implements the functionality of strtok
()
but is passed an additional argument, lasts, which
points to a user-provided pointer which is used by
strtok_r
() to store state which needs to be kept
between calls to scan the same string; unlike
strtok
(), it is not necessary to limit tokenizing to
a single string at a time when using strtok_r
().
EXAMPLES
The following will construct an array of pointers to each individual word in the string s:
#define MAXTOKENS 128 char s[512], *p, *tokens[MAXTOKENS]; char *last; int i = 0; snprintf(s, sizeof(s), "cat dog horse cow"); for ((p = strtok_r(s, " ", &last)); p; (p = strtok_r(NULL, " ", &last)), i++) { if (i < MAXTOKENS - 1) tokens[i] = p; } tokens[i] = NULL;
That is, tokens[0]
will point to
"cat", tokens[1]
will point to
"dog", tokens[2]
will point to
"horse", and tokens[3]
will point to
"cow".
SEE ALSO
index(3), memchr(3), rindex(3), strchr(3), strcspn(3), strpbrk(3), strrchr(3), strsep(3), strspn(3), strstr(3)
STANDARDS
The strtok
() function conforms to
ANSI X3.159-1989 (“ANSI C89”).
The strtok_r
() function conforms to
IEEE Std 1003.1c-1995
(“POSIX.1c”).
BUGS
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
.