NAME
strtok
, strtok_r
— string token
operations
SYNOPSIS
#include
<string.h>
char *
strtok
(char
*str, const char
*sep);
char *
strtok_r
(char
*str, const char
*sep, char
**last);
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_r
()
function is a version of strtok
() that takes an
explicit context argument and is reentrant.
Since
strtok
()
and strtok_r
() modify the string,
str should not point to an area in the initialized
data segment.
RETURN VALUES
The strtok
() and
strtok_r
() functions return a pointer to the
beginning of each subsequent token in the string, after replacing the
separator character itself with a NUL character. When no more tokens remain,
a null pointer is returned.
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))) { 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
memchr(3), strchr(3), strcspn(3), strpbrk(3), strrchr(3), strsep(3), strspn(3), strstr(3), wcstok(3)
STANDARDS
The strtok
() function conforms to
ANSI X3.159-1989 (“ANSI C89”).
The strtok_r
() function conforms to
IEEE Std 1003.1-2001 (“POSIX.1”).
HISTORY
The strtok
() function first appeared in
AT&T System III UNIX and was
reimplemented for 4.3BSD-Tahoe. The
strtok_r
() function first appeared in
NetBSD 1.3 and was reimplemented for
OpenBSD 2.7.
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
.