char* strtok( char* str, const char* delim );
(until C99)char* strtok( char* restrict str, const char* restrict delim );
(since C99)char* strtok_s( char* restrict str, rsize_t* restrict strmax,
const char* restrict delim, char** restrict ptr );
Tokenizes a null-terminated byte string.
1)A sequence of calls to
strtok
breaks the string pointed to by
strinto a sequence of tokens, each of which is delimited by a character from the string pointed to by
delim. Each call in the sequence has a
search target :
Each call in the sequence searches the search target for the first character that is
notcontained in the
separator stringpointed to by
delim, the separator string can be different from call to call.
strtok
then searches from there for the first character that is contained in the separator string.
If str or delim is not a pointer to a null-terminated byte string, the behavior is undefined.
2)Same as
(1), except for the following differences:
If both str points to a character array which lacks the null character and strmax points to a value which is greater than the size of that character array, the behavior is undefined.
As with all bounds-checked functions,
strtok_s
is only guaranteed to be available if
__STDC_LIB_EXT1__is defined by the implementation and if the user defines
__STDC_WANT_LIB_EXT1__to the integer constant
1before including
<string.h>.
strtok_s
stores the number of characters that remain to be examined ptr - pointer to an object of type char*, which is used by strtok_s
to store its internal state [edit] Return value
1) Returns a pointer to the first character of the next token, or a null pointer if there is no token.
2) Returns a pointer to the first character of the next token, or a null pointer if there is no token or there is a runtime-constraint violation.
[edit] NoteThis function is destructive: it writes the '\0' characters in the elements of the string str. In particular, a string literal cannot be used as the first argument of strtok
.
Each call to strtok
modifies a static variable: is not thread safe.
Unlike most other tokenizers, the delimiters in strtok
can be different for each subsequent token, and can even depend on the contents of the previous tokens.
The strtok_s
function differs from the POSIX strtok_r
function by guarding against storing outside of the string being tokenized, and by checking runtime constraints. The Microsoft CRT strtok_s
signature matches this POSIX strtok_r
definition, not the C11 strtok_s
.
#define __STDC_WANT_LIB_EXT1__ 1 #include <stdio.h> #include <string.h> int main(void) { char input[] = "A bird came down the walk"; printf("Parsing the input string '%s'\n", input); char* token = strtok(input, " "); while (token) { puts(token); token = strtok(NULL, " "); } printf("Contents of the input string now: '"); for (size_t n = 0; n < sizeof input; ++n) input[n] ? putchar(input[n]) : fputs("\\0", stdout); puts("'"); #ifdef __STDC_LIB_EXT1__ char str[] = "A bird came down the walk"; rsize_t strmax = sizeof str; const char* delim = " "; char* next_token; printf("Parsing the input string '%s'\n", str); token = strtok_s(str, &strmax, delim, &next_token); while (token) { puts(token); token = strtok_s(NULL, &strmax, delim, &next_token); } printf("Contents of the input string now: '"); for (size_t n = 0; n < sizeof str; ++n) str[n] ? putchar(str[n]) : fputs("\\0", stdout); puts("'"); #endif }
Possible output:
Parsing the input string 'A bird came down the walk' A bird came down the walk Contents of the input string now: 'A\0bird\0came\0down\0the\0walk\0' Parsing the input string 'A bird came down the walk' A bird came down the walk Contents of the input string now: 'A\0bird\0came\0down\0the\0walk\0'[edit] References
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4