If stringp is NULL, strsep returns NULL and does nothing else.
If stringp is non-NULL, strsep finds the first token in the stringp, where tokens are delimited by symbols in the string delim. This token is terminated with a \0 character (by overwriting the delimiter) and stringp is updated to point past the token. In case no delimiter was found, the token is taken to be the entire string stringp, and stringp is made NULL.
strsep returns a pointer to the token, that is, it returns the original value of stringp.
strsep was introduced as a replacement for strtok, since the latter cannot handle empty fields. However, strtok conforms to ANSI-C and hence is more portable.
strsep suffers from the same problems as strtok. In particular, strsep modifies the original string. Avoid it.