| Functions | |||||||||||||||||||||||||||||||||||||||||
| Character manipulation | |||||||||||||||||||||||||||||||||||||||||
| Conversions to and from numeric formats | |||||||||||||||||||||||||||||||||||||||||
|
| ||||||||||||||||||||||||||||||||||||||||
| String manipulation | |||||||||||||||||||||||||||||||||||||||||
|
| ||||||||||||||||||||||||||||||||||||||||
| String examination | |||||||||||||||||||||||||||||||||||||||||
| Memory manipulation | |||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||
| Miscellaneous | |||||||||||||||||||||||||||||||||||||||||
(C11)(C11) | |||||||||||||||||||||||||||||||||||||||||
Defined in header <string.h> | ||
| (1) | ||
char* strtok(char* str,constchar* delim); | (until C99) | |
char* strtok(char*restrict str,constchar*restrict delim); | (since C99) | |
char* strtok_s(char*restrict str, rsize_t*restrict strmax, constchar*restrict delim,char**restrict ptr); | (2) | (since C11) |
Tokenizes a null-terminated byte string.
strtok breaks the string pointed to bystr into a sequence of tokens, each of which is delimited by a character from the string pointed to bydelim. Each call in the sequence has asearch target :strtok then searches from there for the first character that is contained in the separator string.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 constant1 before including<string.h>.Contents |
| str | - | pointer to the null-terminated byte string to tokenize |
| delim | - | pointer to the null-terminated byte string identifying delimiters |
| strmax | - | pointer to an object which initially holds the size ofstr:strtok_s stores the number of characters that remain to be examined |
| ptr | - | pointer to an object of typechar*, which is used bystrtok_s to store its internal state |
This function is destructive: it writes the'\0' characters in the elements of the stringstr. In particular, a string literal cannot be used as the first argument ofstrtok.
Each call tostrtok modifies a static variable: is not thread safe.
Unlike most other tokenizers, the delimiters instrtok can be different for each subsequent token, and can even depend on the contents of the previous tokens.
Thestrtok_s function differs from the POSIXstrtok_r function by guarding against storing outside of the string being tokenized, and by checking runtime constraints. The Microsoft CRTstrtok_s signature matches this POSIXstrtok_r definition, not the C11strtok_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;constchar* 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'AbirdcamedownthewalkContents of the input string now: 'A\0bird\0came\0down\0the\0walk\0'Parsing the input string 'A bird came down the walk'AbirdcamedownthewalkContents of the input string now: 'A\0bird\0came\0down\0the\0walk\0'
| finds the first location of any character in one string, in another string (function)[edit] | |
| returns the length of the maximum initial segment that consists of only the characters not found in another byte string (function)[edit] | |
| returns the length of the maximum initial segment that consists of only the characters found in another byte string (function)[edit] | |
(C95)(C11) | finds the next token in a wide string (function)[edit] |
C++ documentation forstrtok | |