xref: /freebsd/lib/libc/string/strtok.3 (revision 6575e6daae316c2e0cdafbe764f9a6e232ff3ee7)
1b1e12513SWes Peters.\" Copyright (c) 1998 Softweyr LLC.  All rights reserved.
2b1e12513SWes Peters.\"
3b1e12513SWes Peters.\" strtok_r, from Berkeley strtok
4b1e12513SWes Peters.\" Oct 13, 1998 by Wes Peters <wes@softweyr.com>
5b1e12513SWes Peters.\"
658f0484fSRodney W. Grimes.\" Copyright (c) 1988, 1991, 1993
758f0484fSRodney W. Grimes.\"	The Regents of the University of California.  All rights reserved.
858f0484fSRodney W. Grimes.\"
958f0484fSRodney W. Grimes.\" This code is derived from software contributed to Berkeley by
1058f0484fSRodney W. Grimes.\" the American National Standards Committee X3, on Information
1158f0484fSRodney W. Grimes.\" Processing Systems.
1258f0484fSRodney W. Grimes.\"
1358f0484fSRodney W. Grimes.\" Redistribution and use in source and binary forms, with or without
1458f0484fSRodney W. Grimes.\" modification, are permitted provided that the following conditions
1558f0484fSRodney W. Grimes.\" are met:
1658f0484fSRodney W. Grimes.\"
17b1e12513SWes Peters.\" 1. Redistributions of source code must retain the above copyright
18b1e12513SWes Peters.\"    notices, this list of conditions and the following disclaimer.
19b1e12513SWes Peters.\"
20b1e12513SWes Peters.\" 2. Redistributions in binary form must reproduce the above
21b1e12513SWes Peters.\"    copyright notices, this list of conditions and the following
22b1e12513SWes Peters.\"    disclaimer in the documentation and/or other materials provided
23b1e12513SWes Peters.\"    with the distribution.
24b1e12513SWes Peters.\"
25b1e12513SWes Peters.\" 3. All advertising materials mentioning features or use of this
26b1e12513SWes Peters.\"    software must display the following acknowledgement:
27b1e12513SWes Peters.\"
28b1e12513SWes Peters.\"	This product includes software developed by Softweyr LLC, the
29b1e12513SWes Peters.\"      University of California, Berkeley, and its contributors.
30b1e12513SWes Peters.\"
31b1e12513SWes Peters.\" 4. Neither the name of Softweyr LLC, the University nor the names
32b1e12513SWes Peters.\"    of its contributors may be used to endorse or promote products
33b1e12513SWes Peters.\"    derived from this software without specific prior written
34b1e12513SWes Peters.\"    permission.
35b1e12513SWes Peters.\"
36b1e12513SWes Peters.\" THIS SOFTWARE IS PROVIDED BY SOFTWEYR LLC, THE REGENTS AND
37b1e12513SWes Peters.\" CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
38b1e12513SWes Peters.\" INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
39b1e12513SWes Peters.\" MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
40b1e12513SWes Peters.\" DISCLAIMED.  IN NO EVENT SHALL SOFTWEYR LLC, THE REGENTS, OR
41b1e12513SWes Peters.\" CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
42b1e12513SWes Peters.\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
43b1e12513SWes Peters.\" LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
44b1e12513SWes Peters.\" USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
45b1e12513SWes Peters.\" ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
46b1e12513SWes Peters.\" OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
47b1e12513SWes Peters.\" OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
4858f0484fSRodney W. Grimes.\" SUCH DAMAGE.
4958f0484fSRodney W. Grimes.\"
5058f0484fSRodney W. Grimes.\"     @(#)strtok.3	8.2 (Berkeley) 2/3/94
517f3dea24SPeter Wemm.\" $FreeBSD$
5258f0484fSRodney W. Grimes.\"
53b1e12513SWes Peters.Dd November 27, 1998
5458f0484fSRodney W. Grimes.Dt STRTOK 3
55a307d598SRuslan Ermilov.Os
5658f0484fSRodney W. Grimes.Sh NAME
57b1e12513SWes Peters.Nm strtok , strtok_r
5858f0484fSRodney W. Grimes.Nd string tokens
5925bb73e0SAlexey Zelkin.Sh LIBRARY
6025bb73e0SAlexey Zelkin.Lb libc
6158f0484fSRodney W. Grimes.Sh SYNOPSIS
6258f0484fSRodney W. Grimes.Fd #include <string.h>
6358f0484fSRodney W. Grimes.Ft char *
6458f0484fSRodney W. Grimes.Fn strtok "char *str" "const char *sep"
65b1e12513SWes Peters.Ft char *
66b1e12513SWes Peters.Fn strtok_r "char *str" "const char *sep" "char **last"
6758f0484fSRodney W. Grimes.Sh DESCRIPTION
6858f0484fSRodney W. Grimes.Bf -symbolic
696575e6daSRuslan ErmilovThis interface is obsoleted by
706575e6daSRuslan Ermilov.Xr strsep 3 .
7158f0484fSRodney W. Grimes.Ef
7258f0484fSRodney W. Grimes.Pp
7358f0484fSRodney W. GrimesThe
7458f0484fSRodney W. Grimes.Fn strtok
7558f0484fSRodney W. Grimesfunction
7658f0484fSRodney W. Grimesis used to isolate sequential tokens in a null-terminated string,
7758f0484fSRodney W. Grimes.Fa str .
7858f0484fSRodney W. GrimesThese tokens are separated in the string by at least one of the
7958f0484fSRodney W. Grimescharacters in
8058f0484fSRodney W. Grimes.Fa sep .
8158f0484fSRodney W. GrimesThe first time that
8258f0484fSRodney W. Grimes.Fn strtok
8358f0484fSRodney W. Grimesis called,
8458f0484fSRodney W. Grimes.Fa str
8558f0484fSRodney W. Grimesshould be specified; subsequent calls, wishing to obtain further tokens
86555fff21STim Vanderhoekfrom the same string, should pass a null pointer instead.
8758f0484fSRodney W. GrimesThe separator string,
8858f0484fSRodney W. Grimes.Fa sep ,
8958f0484fSRodney W. Grimesmust be supplied each time, and may change between calls.
9058f0484fSRodney W. Grimes.Pp
91e4269284SAndrey A. ChernovThe implementation will behave as if no library function calls
92e4269284SAndrey A. Chernov.Fn strtok .
93e4269284SAndrey A. Chernov.Pp
9458f0484fSRodney W. GrimesThe
95b1e12513SWes Peters.Fn strtok_r
96b1e12513SWes Petersfunction is a reentrant version of
9732150a67SJohn Polstra.Fn strtok .
9832150a67SJohn PolstraThe context pointer
99b1e12513SWes Peters.Fa last
100b1e12513SWes Petersmust be provided on each call.
101b1e12513SWes Peters.Fn strtok_r
102b1e12513SWes Petersmay also be used to nest two parsing loops within one another, as
10332150a67SJohn Polstralong as separate context pointers are used.
104b1e12513SWes Peters.Pp
105b1e12513SWes PetersThe
10658f0484fSRodney W. Grimes.Fn strtok
107b1e12513SWes Petersand
108b1e12513SWes Peters.Fn strtok_r
109b1e12513SWes Petersfunctions
110b1e12513SWes Petersreturn a pointer to the beginning of each subsequent token in the string,
11158f0484fSRodney W. Grimesafter replacing the token itself with a
11258f0484fSRodney W. Grimes.Dv NUL
11358f0484fSRodney W. Grimescharacter.
114555fff21STim VanderhoekWhen no more tokens remain, a null pointer is returned.
115251c176fSRuslan Ermilov.Sh EXAMPLES
116b1e12513SWes PetersThe following uses
117b7edc980SWes Peters.Fn strtok_r
118b1e12513SWes Petersto parse two strings using separate contexts:
119b1e12513SWes Peters.Bd -literal
120b1e12513SWes Peterschar test[80], blah[80];
1212704b2cbSGuy Helmerchar *sep = "\e\e/:;=-";
122b1e12513SWes Peterschar *word, *phrase, *brkt, *brkb;
123b1e12513SWes Peters
1242704b2cbSGuy Helmerstrcpy(test, "This;is.a:test:of=the/string\e\etokenizer-function.");
125b1e12513SWes Peters
126b1e12513SWes Petersfor (word = strtok_r(test, sep, &brkt);
127b1e12513SWes Peters     word;
128b1e12513SWes Peters     word = strtok_r(NULL, sep, &brkt))
129b1e12513SWes Peters{
130b1e12513SWes Peters    strcpy(blah, "blah:blat:blab:blag");
131b1e12513SWes Peters
132b1e12513SWes Peters    for (phrase = strtok_r(blah, sep, &brkb);
133b1e12513SWes Peters         phrase;
134b1e12513SWes Peters         phrase = strtok_r(NULL, sep, &brkb))
135b1e12513SWes Peters    {
1362704b2cbSGuy Helmer        printf("So far we're at %s:%s\en", word, phrase);
137b1e12513SWes Peters    }
138b1e12513SWes Peters}
139b1e12513SWes Peters.Ed
14058f0484fSRodney W. Grimes.Sh SEE ALSO
14158f0484fSRodney W. Grimes.Xr memchr 3 ,
14258f0484fSRodney W. Grimes.Xr strchr 3 ,
14358f0484fSRodney W. Grimes.Xr strcspn 3 ,
14458f0484fSRodney W. Grimes.Xr strpbrk 3 ,
14558f0484fSRodney W. Grimes.Xr strrchr 3 ,
14658f0484fSRodney W. Grimes.Xr strsep 3 ,
14758f0484fSRodney W. Grimes.Xr strspn 3 ,
14858f0484fSRodney W. Grimes.Xr strstr 3
14958f0484fSRodney W. Grimes.Sh STANDARDS
15058f0484fSRodney W. GrimesThe
15158f0484fSRodney W. Grimes.Fn strtok
15258f0484fSRodney W. Grimesfunction
15358f0484fSRodney W. Grimesconforms to
154588a200cSRuslan Ermilov.St -isoC .
15558f0484fSRodney W. Grimes.Sh BUGS
15658f0484fSRodney W. GrimesThe System V
15758f0484fSRodney W. Grimes.Fn strtok ,
15858f0484fSRodney W. Grimesif handed a string containing only delimiter characters,
15958f0484fSRodney W. Grimeswill not alter the next starting point, so that a call to
16058f0484fSRodney W. Grimes.Fn strtok
16158f0484fSRodney W. Grimeswith a different (or empty) delimiter string
16258f0484fSRodney W. Grimesmay return a
16358f0484fSRodney W. Grimes.Pf non- Dv NULL
16458f0484fSRodney W. Grimesvalue.
16558f0484fSRodney W. GrimesSince this implementation always alters the next starting point,
16658f0484fSRodney W. Grimessuch a sequence of calls would always return
16758f0484fSRodney W. Grimes.Dv NULL .
16874804d58SMike Pritchard.Sh AUTHORS
169d0353b83SRuslan Ermilov.An Wes Peters ,
170d0353b83SRuslan ErmilovSoftweyr LLC:
171d0353b83SRuslan Ermilov.Aq wes@softweyr.com
172726b61abSRuslan Ermilov.Pp
17374804d58SMike PritchardBased on the
17474804d58SMike Pritchard.Fx 3.0
17574804d58SMike Pritchardimplementation.
176