当前位置:首页 >> 世界杯2017

C 库函数 -strtok()

C 库函数 - strtok() C 标准库 - strtok() 是 C 标准库中的一个字符串处理函数,用于将字符串分割成一系列子字符串(即"标记"或"token")。 C 库函数 c

adminadmin

C 库函数 - strtok()

C 标准库 -

strtok() 是 C 标准库中的一个字符串处理函数,用于将字符串分割成一系列子字符串(即"标记"或"token")。

C 库函数 char *strtok(char *str, const char *delim) 分解字符串 str 为一组字符串,delim 为分隔符。

声明

下面是 strtok() 函数的声明。

char *strtok(char *str, const char *delim)

参数

str: 要分割的字符串。在第一次调用时,传入要分割的字符串;后续调用时,传入 NULL,表示继续分割同一个字符串。

delim: 分隔符字符串。strtok() 会根据这个字符串中的任意一个字符来分割 str。

返回值

返回指向下一个标记的指针。如果没有更多的标记,则返回 NULL。

实例

下面的实例演示了 strtok() 函数的用法。

实例

#include

#include

int main () {

char str[80] = "This is - www.runoob.com - website";

const char s[2] = "-";

char *token;

/* 获取第一个子字符串 */

token = strtok(str, s);

/* 继续获取其他的子字符串 */

while( token != NULL ) {

printf( "%s\n", token );

token = strtok(NULL, s);

}

return(0);

}

让我们编译并运行上面的程序,这将产生以下结果:

This is

www.runoob.com

website

注意事项

修改原字符串: strtok() 会修改传入的字符串,将分隔符替换为 \0(空字符)。因此,原始字符串会被破坏。

不可重入: strtok() 使用静态缓冲区来保存状态,因此它不是线程安全的。如果在多线程环境中使用,可以考虑使用 strtok_r()(可重入版本)。

连续分隔符: 如果字符串中有连续的分隔符,strtok() 会忽略它们,并返回下一个有效的标记。

可重入版本:strtok_r()

strtok_r() 是 strtok() 的可重入版本,它允许你在多线程环境中安全地使用。它的原型如下:

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

saveptr: 是一个指向 char* 的指针,用于保存分割的状态。

实例

#include

#include

int main() {

char str[] = "This is a sample string";

char *token;

char *saveptr;

// 第一次调用 strtok_r,传入要分割的字符串

token = strtok_r(str, " ", &saveptr);

// 继续调用 strtok_r,直到返回 NULL

while (token != NULL) {

printf("%s\n", token);

token = strtok_r(NULL, " ", &saveptr);

}

return 0;

}

strtok() 是一个方便的字符串分割函数,但需要注意它的副作用(修改原字符串)和不可重入性。在多线程环境中,建议使用 strtok_r() 来避免竞争条件。

C 标准库 -


Top