什么是strtok()函数?
strtok()函数是C语言的一个标准库函数,它可以将一个字符串按照指定的分隔符切割成若干个子串,并返回每个子串的指针。这样,我们就可以方便地处理一些复杂的字符串,比如从一行文本中提取单词,或者从一个路径中提取文件名等。
strtok()函数的原型和参数
strtok()函数的原型如下:
char *strtok(char *str, const char *delim);
其中,str是要被切割的字符串,delim是包含分隔符的字符串。在第一次调用strtok()函数时,需要将str作为第一个参数传入,之后的调用需要将第一个参数设置为NULL,以便继续从上次的位置切割。
strtok()函数的返回值和注意事项
strtok()函数的返回值是一个char*类型的指针,指向被切割出的子串的首地址。如果没有更多的子串,或者参数不合法,那么返回NULL。
需要注意的是,strtok()函数会破坏被切割的字符串的完整性,即每次切割后,原来的字符串就会少掉一部分,分隔符的位置会被替换成’\0’字符。因此,如果要保持原字符串的完整性,可以使用其他的方法,如strchr()和sscanf()的组合等。
另外,strtok()函数不是线程安全的,因为它会使用一个静态变量来保存上次切割的位置。如果多个线程同时调用strtok()函数,那么可能会出现错误。为了解决这个问题,可以使用strtok_r()或strtok_s()函数,它们会使用一个额外的参数来保存上次切割的位置,从而保证线程安全性。
strtok()函数的示例代码
下面是一个使用strtok()函数的示例代码,它将一个字符串按照逗号和空格切割,并打印出每个子串:
#include <stdio.h>
#include <string.h>
int main()
{
char str[] = "Hello, world! This is a test.";
const char delim[] = ", ";
char *token;
// 第一次调用strtok()函数,传入str和delim
token = strtok(str, delim);
// 循环调用strtok()函数,传入NULL和delim
while (token != NULL)
{
// 打印出每个子串
printf("%s\n", token);
// 继续调用strtok()函数,传入NULL和delim
token = strtok(NULL, delim);
}
return 0;
}
运行结果如下:
Hello
world!
This
is
a
test.