strtok ()- 标记化字符串
格式
#include <string.h>
char *strtok(char *string1, const char *string2);语言级别
ANSI
线程安全
False
请改为使用 strtok_r() 。
语言环境敏感
此函数的行为可能受当前语言环境的 LC_CTYPE 类别影响。 有关更多信息,请参阅 了解 CCSID 和语言环境。
描述
strtok() 函数将 string1 作为一系列零个或多个标记,并将 string2 作为充当 string1中标记的定界符的字符集。 string1 中的标记可以由 string2中的一个或多个定界符分隔。 通过对 strtok() 函数的一系列调用,可以找到 string1 中的标记。
在对给定 string1的 strtok() 函数的第一次调用中, strtok() 函数在 string1中搜索第一个标记,跳过前导定界符。 返回指向第一个令牌的指针。
当使用 NULL string1 参数调用 strtok() 函数时,将从最后一个非空 string1 参数的存储副本中读取下一个令牌。 每个定界符都将替换为空字符。 一组定界符可能因调用而异,因此 string2 可以采用任何值。 请注意,在调用 strtok() 函数之后,不会保留 string1 的初始值。
请注意, strtok() 函数将数据写入缓冲区。 应该将该函数传递到包含要标记化的字符串的非关键缓冲区,因为该缓冲区将被 strtok() 函数损坏。
返回值
首次调用
strtok() 函数时,它会返回指向 string1中的第一个标记的指针。 在稍后使用相同令牌字符串的调用中, strtok() 函数返回指向该字符串中下一个令牌的指针。 当没有更多标记时,将返回 NULL 指针。 所有标记均为空结束。注:
strtok() 函数使用内部静态指针指向要标记化的字符串中的下一个标记。 可以使用 strtok() 函数 strtok_r()的重入版本 (不使用任何内部静态存储器) 来代替 strtok() 函数。示例
通过使用循环,此示例从字符串中收集以逗号分隔的标记,直到不留下任何标记为止。 此示例打印令牌
a string, of和 tokens。#include <stdio.h>
#include <string.h>
int main(void)
{
char *token, *string = "a string, of, ,tokens\0,after null terminator";
/* the string pointed to by string is broken up into the tokens
"a string", " of", " ", and "tokens" ; the null terminator (\0)
is encountered and execution stops after the token "tokens" */
token = strtok(string, ",");
do
{
printf("token: %s\n", token);
}
while (token = strtok(NULL, ","));
}
/***************** Output should be similar to: *****************
token: a string
token: of
token:
token: tokens
*/