Microsoft KB Archive/51327

= INFO: strtok: C Function -- Documentation Supplement =

Article ID: 51327

Article Last Modified on 7/5/2005

-

APPLIES TO

 The C Run-Time (CRT), when used with:  Microsoft C Professional Development System 6.0a

 Microsoft C Professional Development System 6.0a

 Microsoft Visual C++ 1.0 Professional Edition

 Microsoft Visual C++ 1.5 Professional Edition</li></ul>

 Microsoft Visual C++ 1.0 Professional Edition</li></ul>

 Microsoft Visual C++ 2.0 Professional Edition</li></ul>

 Microsoft Visual C++ 4.0 Standard Edition</li></ul>

 Microsoft Visual C++ 5.0 Standard Edition</li></ul>

 Microsoft Visual C++ 6.0 Service Pack 5</li></ul> </li></ul>

-

<div class="notice_section">

This article was previously published under Q51327

<div class="notice_section">

MS-DOS:5.1,6.0,6.00a,6.00ax,7.0; OS/2:5.1,6.0,6.00a; WINDOWS:1.0,1.5; WINDOWS NT:1.0,2.0,4.0,5.0

<div class="summary_section">

SUMMARY
In Microsoft C, the strtok function takes two strings as arguments. The first is a series of zero or more tokens separated by delimiters defined by the second string. The first call to strtok returns a pointer to the first token in the first argument. To get the next token in the original string, a call to strtok must be made with NULL as the first argument, which tells strtok to search for the next token in the previous token string.

Keep the following information in mind when using strtok:


 * strtok will replace a delimiter in the original string with a NULL each time the function is called using the same string, so the original string is modified by the use of strtok.
 * The second argument to strtok can be changed at any time to a different delimiter.
 * Only single characters are considered to be delimiters.

<div class="moreinformation_section">

MORE INFORMATION
On the first call to strtok, the function searches the string argument given as the first parameter for any token delimiter defined in the second string argument. Any further call to strtok with NULL as the first argument will return a pointer to the next token in the original string. The following sample program from page 603 of the &quot;Microsoft C Optimizing Compiler: Run-Time Library Reference&quot; manual for version 5.1 shows how strtok searches a token string:

Sample Code
/* Compile options needed: none


 * 1) include <string.h>
 * 2) include <stdio.h>

char string[] = &quot;a string,of ,,tokens&quot;; char *token;

void main(void) {       token = strtok(string,&quot; ,&quot;); /*There are two delimiters here*/ while (token != NULL){ printf(&quot;The token is: %s\n&quot;, token); token = strtok(NULL,&quot; ,&quot;); } } The output of this program is as follows:
 * The token is: a
 * The token is: string
 * The token is: of
 * The token is: tokens

The following is a sample representation of the area in memory around the token pointer during execution of the above program. Note the replacement of the delimiter with a NULL character each time a token is found: <pre class="fixed_text"> -  |a |  |s |t |r |i |n |g |, |o |f |  |, |, |t |o |k |e |n |s | -  This is the original string before the first call to strtok.

-  |a |\0|s |t |r |i |n |g |, |o |f |  |, |, |t |o |k |e |n |s | -   ^- Token will point here on the first call.

-  |a |\0|s |t |r |i |n |g |\0|o |f |  |, |, |t |o |k |e |n |s | -         ^-- Token will point here on the second call.

-  |a |\0|s |t |r |i |n |g |\0|o |f |\0|, |, |t |o |k |e |n |s | -                              ^- Token will point here on                                      the third call.

(and so on)

Keywords: kbinfo kbcrt kbcode KB51327

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.