### 7.42 `strtok`, `strtok_r`, `strsep`—get next token from a string ¶

Synopsis

    #include <string.h>
    char *strtok(char *restrict source,
        const char *restrict delimiters);
    char *strtok_r(char *restrict source,
        const char *restrict delimiters,
        char **lasts);
    char *strsep(char **source_ptr, const char *delimiters);

Description
The `strtok` function is used to isolate sequential tokens in a null-terminated string, `*source`. These tokens are delimited in the string by at least one of the characters in `*delimiters`. The first time that `strtok` is called, `*source` should be specified; subsequent calls, wishing to obtain further tokens from the same string, should pass a null pointer instead. The separator string, `*delimiters`, 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 null character. When no more tokens remain, a null pointer is returned.

The `strtok_r` function has the same behavior as `strtok`, except a pointer to placeholder `*lasts` must be supplied by the caller.

The `strsep` function is similar in behavior to `strtok`, except a pointer to the string pointer must be supplied `source_ptr` and the function does not skip leading delimiters. When the string starts with a delimiter, the delimiter is changed to the null character and the empty string is returned. Like `strtok_r` and `strtok`, the `*source_ptr` is updated to the next character following the last delimiter found or NULL if the end of string is reached with no more delimiters.

Returns
`strtok`, `strtok_r`, and `strsep` all return a pointer to the next token, or `NULL` if no more tokens can be found. For `strsep`, a token may be the empty string.

Notes
`strtok` is unsafe for multi-threaded applications. `strtok_r` and `strsep` are thread-safe and should be used instead.

Portability
`strtok` is ANSI C. `strtok_r` is POSIX. `strsep` is a BSD extension.

`strtok`, `strtok_r`, and `strsep` require no supporting OS subroutines.