例子:

#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。