STRTOK(3) | Library Functions Manual | STRTOK(3) |
char *
strtok(char * restrict str, const char * restrict sep);
char *
strtok_r(char *str, const char *sep, char **lasts);
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”.
August 11, 2002 | NetBSD 6.1 |