strtok 函数的使用
strtok 函数的概念
char * strtok ( char * str, const char * sep);
sep参数指向⼀个字符串,定义了⽤作分隔符的字符集合 第⼀个参数指定⼀个字符串,它包含了0个或者多个由sep字符串中⼀个或者多个分隔符分割的标记 strtok函数找到str中的下⼀个标记,并将其用\0 结尾,返回⼀个指向这个标记的指针。(注: strtok函数会改变被操作的字符串,所以在使⽤strtok函数切分的字符串⼀般都是临时拷⻉的内容并且可修改。) strtok函数的第⼀个参数不为NULL,函数将找到str中第⼀个标记,strtok函数将保存它在字符串中的位置 strtok函数的第⼀个参数为 NULL ,函数将在同⼀个字符串中被保存的位置开始,查找下⼀个标记。 如果字符串中不存在更多的标记,则返回 NULL 指针
strtok 函数的使用
#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <string.h> int main() { char str1[] = "fly@asd.com"; char str2[30] = { 0 }; //对str1字符串进行拷贝,不改变str1 strcpy(str2, str1); const char* sep = "@."; //分隔符的字符集合,没有顺序可言 char* ret = NULL; //定义一个空指针 //strtok函数找到第一个分隔符@,会返回f的地址给ret //并在@的位置上添加'\0' ret = strtok(str2, sep); printf("%s\n", ret); //strtok函数的第⼀个参数为 NULL //函数将在同⼀个字符串中被保存的位置开始,查找下⼀个标记。 //就是从a开始查找下一个分隔符@或者. //找到.后会在.的位置上添加'\0'替换. //之后返回a的地址给ret //之所以传NULL可以找到字符串并继续向后查找,是因为分隔符被'\0'替换后的位置会被strtok函数记住 ret = strtok(NULL, sep); printf("%s\n", ret); //同上 ret = strtok(NULL, sep); printf("%s\n", ret); return 0; }
一般不会这样写代码使用strtok这个函数
因为不知道需要分割的字符串被分割成几段
strtok 函数的正确使用
例1
#include <stdio.h> #include <string.h> int main() { char str1[] = "fly@asd.com"; char str2[30] = { 0 }; strcpy(str2, str1); const char* sep = "@."; //分隔符的字符集合 char* ret = NULL; //定义一个空指针 for (ret = strtok(str2, sep); ret != NULL; ret = strtok(NULL, sep)) { printf("%s\n", ret); } return 0; }
例2
#include <stdio.h> #include <string.h> int main() { char str1[] = "fly@asd.com@fdfd"; char str2[30] = { 0 }; strcpy(str2, str1); const char* sep = "@."; //分隔符的字符集合 char* ret = NULL; //定义一个空指针 for (ret = strtok(str2, sep); ret != NULL; ret = strtok(NULL, sep)) { printf("%s\n", ret); } return 0; }
char str1[] = "fly@asd.com@fdfd";
上面代码字符串长度随意改变,for循环不变,一样可以对字符串进行正常分割
通过第一段代码很容易了解for循环的意义和含义