1 .\" Copyright (C) 2005, 2013 Michael Kerrisk <mtk.manpages@gmail.com>
2 .\" a few fragments from an earlier (1996) version by
3 .\" Andries Brouwer (aeb@cwi.nl) remain.
5 .\" SPDX-License-Identifier: Linux-man-pages-copyleft
7 .\" Rewritten old page, 960210, aeb@cwi.nl
8 .\" Updated, added strtok_r. 2000-02-13 Nicolás Lichtmaier <nick@debian.org>
9 .\" 2005-11-17, mtk: Substantial parts rewritten
10 .\" 2013-05-19, mtk: added much further detail on the operation of strtok()
12 .TH STRTOK 3 2021-03-22 "GNU" "Linux Programmer's Manual"
14 strtok, strtok_r \- extract tokens from strings
17 .RI ( libc ", " \-lc )
20 .B #include <string.h>
22 .BI "char *strtok(char *restrict " str ", const char *restrict " delim );
23 .BI "char *strtok_r(char *restrict " str ", const char *restrict " delim ,
24 .BI " char **restrict " saveptr );
28 Feature Test Macro Requirements for glibc (see
29 .BR feature_test_macros (7)):
35 || /* Glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
40 function breaks a string into a sequence of zero or more nonempty tokens.
43 the string to be parsed should be
46 In each subsequent call that should parse the same string,
52 argument specifies a set of bytes that
53 delimit the tokens in the parsed string.
54 The caller may specify different strings in
57 calls that parse the same string.
61 returns a pointer to a
62 null-terminated string containing the next token.
63 This string does not include the delimiting byte.
64 If no more tokens are found,
68 A sequence of calls to
70 that operate on the same string maintains a pointer
71 that determines the point from which to start searching for the next token.
74 sets this pointer to point to the first byte of the string.
75 The start of the next token is determined by scanning forward
76 for the next nondelimiter byte in
78 If such a byte is found, it is taken as the start of the next token.
79 If no such byte is found,
80 then there are no more tokens, and
83 (A string that is empty or that contains only delimiters
86 to return NULL on the first call.)
88 The end of each token is found by scanning forward until either
89 the next delimiter byte is found or until the
90 terminating null byte (\(aq\e0\(aq) is encountered.
91 If a delimiter byte is found, it is overwritten with
92 a null byte to terminate the current token, and
94 saves a pointer to the following byte;
95 that pointer will be used as the starting point
96 when searching for the next token.
99 returns a pointer to the start of the found token.
101 From the above description,
102 it follows that a sequence of two or more contiguous delimiter bytes in
103 the parsed string is considered to be a single delimiter, and that
104 delimiter bytes at the start or end of the string are ignored.
105 Put another way: the tokens returned by
107 are always nonempty strings.
108 Thus, for example, given the string "\fIaaa;;bbb,\fP",
111 that specify the delimiter string "\fI;,\fP"
112 would return the strings "\fIaaa\fP" and "\fIbbb\fP",
113 and then a null pointer.
117 function is a reentrant version of
121 argument is a pointer to a
123 variable that is used internally by
125 in order to maintain context between successive calls that parse the
131 should point to the string to be parsed, and the value of
133 is ignored (but see NOTES).
138 (and the buffer that it points to)
139 should be unchanged since the previous call.
141 Different strings may be parsed concurrently using sequences of calls to
143 that specify different
151 functions return a pointer to
152 the next token, or NULL if there are no more tokens.
154 For an explanation of the terms used in this section, see
162 Interface Attribute Value
165 T} Thread safety MT-Unsafe race:strtok
168 T} Thread safety MT-Safe
176 POSIX.1-2001, POSIX.1-2008, C89, C99, SVr4, 4.3BSD.
179 POSIX.1-2001, POSIX.1-2008.
181 On some implementations,
182 .\" Tru64, according to its manual page
184 is required to be NULL on the first call to
186 that is being used to parse
189 Be cautious when using these functions.
190 If you do use them, note that:
192 These functions modify their first argument.
194 These functions cannot be used on constant strings.
196 The identity of the delimiting byte is lost.
200 function uses a static buffer while parsing, so it's not thread safe.
203 if this matters to you.
205 The program below uses nested loops that employ
207 to break a string into a two-level hierarchy of tokens.
208 The first command-line argument specifies the string to be parsed.
209 The second argument specifies the delimiter byte(s)
210 to be used to separate that string into "major" tokens.
211 The third argument specifies the delimiter byte(s)
212 to be used to separate the "major" tokens into subtokens.
214 An example of the output produced by this program is the following:
218 .RB "$" " ./a.out \(aqa/bbb///cc;xxx:yyy:\(aq \(aq:;\(aq \(aq/\(aq"
237 main(int argc, char *argv[])
239 char *str1, *str2, *token, *subtoken;
240 char *saveptr1, *saveptr2;
244 fprintf(stderr, "Usage: %s string delim subdelim\en",
249 for (j = 1, str1 = argv[1]; ; j++, str1 = NULL) {
250 token = strtok_r(str1, argv[2], &saveptr1);
253 printf("%d: %s\en", j, token);
255 for (str2 = token; ; str2 = NULL) {
256 subtoken = strtok_r(str2, argv[3], &saveptr2);
257 if (subtoken == NULL)
259 printf("\et \-\-> %s\en", subtoken);
267 Another example program using
270 .BR getaddrinfo_a (3).