# strsep

## NAME



           strsep - extract token from string
    


## LIBRARY



           Standard C library (_libc_ , _-lc_)
    


## SYNOPSIS



           **#include <string.h>**
    
           **char *strsep(char **restrict** _stringp_**, const char *restrict** _delim_**);**
    
       Feature Test Macro Requirements for glibc (see
       feature_test_macros(7)):
    
           **strsep**():
               Since glibc 2.19:
                   _DEFAULT_SOURCE
               glibc 2.19 and earlier:
                   _BSD_SOURCE
    


## DESCRIPTION



           If _*stringp_ is NULL, the **strsep**() function returns NULL and does
           nothing else.  Otherwise, this function finds the first token in
           the string _*stringp_ that is delimited by one of the bytes in the
           string _delim_.  This token is terminated by overwriting the
           delimiter with a null byte ('\0'), 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.
    


## RETURN VALUE



           The **strsep**() function returns a pointer to the token, that is, it
           returns the original value of _*stringp_.
    


## ATTRIBUTES



           For an explanation of the terms used in this section, see
           attributes(7).
           ┌──────────────────────────────────────┬───────────────┬─────────┐
           │ **Interface** │ **Attribute** │ **Value** │
           ├──────────────────────────────────────┼───────────────┼─────────┤
           │ **strsep**()                             │ Thread safety │ MT-Safe │
           └──────────────────────────────────────┴───────────────┴─────────┘
    


## STANDARDS



           BSD.
    


## CAVEATS



           Be cautious when using this function.  If you do use it, note
           that:
    
           •  This function modifies its first argument.
    
           •  This function cannot be used on constant strings.
    
           •  The identity of the delimiting character is lost.
    


## EXAMPLES



           The program below is a port of the one found in strtok(3), which,
           however, doesn't discard multiple delimiters or empty tokens:
    
               $ **./a.out 'a/bbb///cc;xxx:yyy:' ':;' '/'**
               1: a/bbb///cc
                        --> a
                        --> bbb
                        -->
                        -->
                        --> cc
               2: xxx
                        --> xxx
               3: yyy
                        --> yyy
               4:
                        -->
    
       **Program source**
    
           #include <stdio.h>
           #include <stdlib.h>
           #include <string.h>
    
           int
           main(int argc, char *argv[])
           {
               char *token, *subtoken;
    
               if (argc != 4) {
                   fprintf(stderr, "Usage: %s string delim subdelim\n", argv[0]);
                   exit(EXIT_FAILURE);
               }
    
               for (unsigned int j = 1; (token = strsep(&argv[1], argv[2])); j++) {
                   printf("%u: %s\n", j, token);
    
                   while ((subtoken = strsep(&token, argv[3])))
                       printf("\t --> %s\n", subtoken);
               }
    
               exit(EXIT_SUCCESS);
           }
    


* * *