NAME
strtok, strtok_r —
string tokens
LIBRARY
Standard C Library (libc, -lc)
SYNOPSIS
#include <string.h>
char *
strtok(
char *
restrict str,
const char *
restrict sep);
char *
strtok_r(
char
*str,
const char
*sep,
char **lasts);
DESCRIPTION
The
strtok() 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
.