STRTOK(3) | Library Functions Manual | STRTOK(3) |
strtok, strtok_r
—
#include <string.h>
char *
strtok
(char
* restrict str, const
char * restrict sep);
char *
strtok_r
(char
*str, const char
*sep, char
**lasts);
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
().
#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”.
strtok
() function conforms to ANSI
X3.159-1989 (“ANSI C89”). The
strtok_r
() function conforms to IEEE
Std 1003.1c-1995 (“POSIX.1c”).
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
.
August 11, 2002 | NetBSD 9.2 |