例子:
#include <stdio.h>
#include <string.h>
int main()
{
char arr1[] = "Hello@.Worl@d";
const char arr2[] = "@.";
char* str;
for (str=strtok(arr1, arr2); str != NULL; str=strtok(NULL, arr2))
{
printf("%s ", str);
}
return 0;
}
输出结果:Hello Worl d
char* strtok(char* strToken, const char* strDelimit)函数是用于将规定符号转化成切割符,将字符串进行切割。
定义:1.strToken:是用于接收所需要切割的字符串的地址
2.strDelimit:是用于接收规定的切割符的字符串的地址
3.返回值:当访问的strToken非空指针时,而是字符串首元素的地址时,是返回值char *返回的是本次执行切割的切割符的前面的字符串的首元素地址。 strToken为\0时,返回值char *返回的是空指针NULL。
一、strtok(arr1,arr2);→strtok(arr3,arr2);→......strtok(arr n,arr2);
原理:当strtok(arr1,arr2);中arr1为非空指针时,会根据arr2传进去的规定切割符字符串的地址找到arr1字符串中的切割符,并将其设为\0,并将该\0的下一个字符地址存储到静态变量(static)中,并将其返回,在函数结束后,该变量仍不销毁。下次执行时如果strtok(arr3,arr2);中arr3仍为非空指针时,将会重复上面步骤,会将静态变量更新为下一个设为\0的分隔符下一个字符的地址。
该输出的结果是:(arr1,arr3,......arr n中第一个切割符对应的前一个字符串的首元素的地址的对应的内容)
二、 strtok(arr1,arr2);→strtok(NULL,arr2);→......strtok(NULL,arr n);
原理:当strtok(arr1,arr2);中arr1为非空指针时,会根据arr2传进去的规定切割符字符串的地址找到arr1字符串中的切割符,并将其设为\0,并将该\0的下一个字符地址存储到静态变量(static)中,并将其返回,在函数结束后,该变量仍不销毁。下次执行时如果strtok(NULL,arr2);char *strToken处接收的如果是空指针时,该函数会根据上次存储的静态变量的地址默认赋为strToken的地址,然后重复上面步骤,进行规定切割符设为\0,然后更新静态变量(static),返回该次切割符前面的字符串的首元素的地址。依次重复上述步骤......直到寻找切割符的指针找到\0时(也就是字符串已经读取完,末尾为\0时),返回该次字符串的首元素的地址,再将静态变量更新为\0的地址,下次执行该函数时将静态变量赋值给strToken,当strToken是\0的地址时,函数会停止执行操作,并返回空指针NULL。