strtok_r(3) — Linux manual page

NAME | LIBRARY | SYNOPSIS | DESCRIPTION | RETURN VALUE | ATTRIBUTES | VERSIONS | STANDARDS | HISTORY | EXAMPLES | SEE ALSO | COLOPHON

strtok_r(3)              Library Functions Manual             strtok_r(3)

NAME         top

       strtok_r - string tokenize reentrant

LIBRARY         top

       Standard C library (libc, -lc)

SYNOPSIS         top

       #include <string.h>

       char *strtok_r(char *_Nullable restrict str, const char *restrict delim,
                      char **restrict saveptr);

   Feature Test Macro Requirements for glibc (see
   feature_test_macros(7)):

       strtok_r():
           _POSIX_C_SOURCE
               || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE

DESCRIPTION         top

       The strtok_r() function is a reentrant version of strtok(3).

       The saveptr argument is a pointer to a char * variable that is
       used internally by strtok_r() in order to maintain context between
       successive calls that parse the same string.

       On the first call to strtok_r(), str should point to the string to
       be parsed, and the value of *saveptr is ignored (but see
       VERSIONS).  In subsequent calls, str should be NULL, and saveptr
       (and the buffer that it points to) should be unchanged since the
       previous call.

       Different strings may be parsed concurrently using sequences of
       calls to strtok_r() that specify different saveptr arguments.

RETURN VALUE         top

       strtok_r() returns a pointer to the next token, or NULL if there
       are no more tokens.

ATTRIBUTES         top

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

VERSIONS         top

       On some implementations, *saveptr is required to be NULL on the
       first call to strtok_r() that is being used to parse str.

STANDARDS         top

       POSIX.1-2008.

HISTORY         top

       POSIX.1-2001.

EXAMPLES         top

       The program below uses nested loops that employ strtok_r() to
       break a string into a two-level hierarchy of tokens.  The first
       command-line argument specifies the string to be parsed.  The
       second argument specifies the delimiter byte(s) to be used to
       separate that string into "major" tokens.  The third argument
       specifies the delimiter byte(s) to be used to separate the "major"
       tokens into subtokens.

       An example of the output produced by this program is the
       following:

           $ ./a.out 'a/bbb///cc;xxx:yyy:' ':;' '/'
           1: a/bbb///cc
                    --> a
                    --> bbb
                    --> cc
           2: xxx
                    --> xxx
           3: yyy
                    --> yyy

   Program source

       #include <stdio.h>
       #include <stdlib.h>
       #include <string.h>

       int
       main(int argc, char *argv[])
       {
           char *str1, *str2, *token, *subtoken;
           char *saveptr1, *saveptr2;
           int j;

           if (argc != 4) {
               fprintf(stderr, "Usage: %s string delim subdelim\n",
                       argv[0]);
               exit(EXIT_FAILURE);
           }

           for (j = 1, str1 = argv[1]; ; j++, str1 = NULL) {
               token = strtok_r(str1, argv[2], &saveptr1);
               if (token == NULL)
                   break;
               printf("%d: %s\n", j, token);

               for (str2 = token; ; str2 = NULL) {
                   subtoken = strtok_r(str2, argv[3], &saveptr2);
                   if (subtoken == NULL)
                       break;
                   printf("\t --> %s\n", subtoken);
               }
           }

           exit(EXIT_SUCCESS);
       }

SEE ALSO         top

       strtok(3)

COLOPHON         top

       This page is part of the man-pages (Linux kernel and C library
       user-space interface documentation) project.  Information about
       the project can be found at 
       ⟨https://www.kernel.org/doc/man-pages/⟩.  If you have a bug report
       for this manual page, see
       ⟨https://git.kernel.org/pub/scm/docs/man-pages/man-pages.git/tree/CONTRIBUTING⟩.
       This page was obtained from the tarball man-pages-6.18.tar.gz
       fetched from
       ⟨https://mirrors.edge.kernel.org/pub/linux/docs/man-pages/⟩ on
       2026-05-24.  If you discover any rendering problems in this HTML
       version of the page, or you believe there is a better or more up-
       to-date source for the page, or you have corrections or
       improvements to the information in this COLOPHON (which is not
       part of the original manual page), send a mail to
       man-pages@man7.org

Linux man-pages 6.18            2026-02-25                    strtok_r(3)

Pages that refer to this page: strtok(3)signal-safety(7)