c/string/byte/strtok

@1@ Finds the next token in a null-terminated byte string pointed to by. The separator characters are identified by null-terminated byte string pointed to by.

@@This function is designed to be called multiple times to obtain successive tokens from the same string.


 * If is not a null pointer, the call is treated as the first call to  for this particular string. The function searches for the first character which is not contained in.
 * If no such character was found, there are no tokens in at all, and the function returns a null pointer.
 * If such character was found, it is the beginning of the token. The function then searches from that point on for the first character that is contained in.
 * If no such character was found, has only one token, and future calls to  will return a null pointer
 * If such character was found, it is replaced by the null character and the pointer to the following character is stored in a static location for subsequent invocations.
 * The function then returns the pointer to the beginning of the token
 * If is a null pointer, the call is treated as a subsequent call to : the function continues from where it left in previous invocation. The behavior is the same as if the previously stored pointer is passed as.

@@The behavior is undefined if either or  is not a pointer to a null-terminated byte string.

@2@ Same as, except that on every step, writes the number of characters left to see in into  and writes the tokenizer's internal state to. Repeat calls (with null ) must pass and  with the values stored by the previous call. Also, the following errors are detected at runtime and call the currently installed constraint handler function, without storing anything in the object pointed to by
 * ,, or is a null pointer
 * on a non-initial call (with null ), is a null pointer
 * on the first call, is zero or greater than rsize_max
 * search for the end of a token reaches the end of the source string (as measured by the initial value of ) without encountering the null terminator

@@The behavior is undefined if both points to a character array which lacks the null character and  points to a value which is greater than the size of that character array.

Return value
Returns pointer to the beginning of the next token or a null pointer if there are no more tokens.

Note
This function is destructive: it writes the characters in the elements of the string. In particular, a string literal cannot be used as the first argument of.

Each call to modifies a static variable: is not thread safe.

Unlike most other tokenizers, the delimiters in can be different for each subsequent token, and can even depend on the contents of the previous tokens.

The function differs from the POSIX  function by guarding against storing outside of the string being tokenized, and by checking runtime constraints. The Microsoft CRT signature matches this POSIX  definition, not the C11.