一.函数简介:
strtok是用来切割字符串的,引用头文件为#include<string.h>
strtok函数的声明:
char * strtok ( char * str, const char * delimiters );
其中要分割的字符串是str, delimiters是字符串中分割符的集合
该函数返回的是原字符串的首地址
事例如下:
1. #include<stdio.h> 2. #include<string.h> 3. int main() 4. { 5. char arr[]="2695855992@qq.com"; 6. char* p="@. "; 7. char* ret=NULL; 8. for(ret=strtok(arr,p);ret!=NULL;ret=strtok(NULL,p)) 9. { 10. printf("%s\n",ret); 11. } 12. return 0; 13. }
结果:
从例子我们可以看出strtok函数的基本使用方法,输入一个字符串,然后将其按照一定的分割符(例中的“@.”),将字符串分割成短的字符串。值得注意的是
假如字符串是"aaa-bbb-ccc"
1.第一次调用strtok(),传入的参数str是要被分割的字符串{aaa - bbb -ccc},而成功后返回的是第一个子字符串{aaa};
2.而第二次调用strtok的时候,传入的第一个参数应该为NULL,使得该函数默认使用上一次未分割完的字符串继续分割 ,就从上一次分割的位置{aaa-}作为本次分割的起始位置,直到分割结束。
二.注意事项
这里首先需要强调的是strtok函数在进行字符串分解的时候,其第一个参数,即str是在变化的,就像前面说过的一样,其只是对原字符串(str)进行了调整,也就是改变了原字符串。由上面的例子来看,""2695855992@qq.com"是源字符串,在调用strtok对其分解结束后,字符串变成了"26958559920qq0com",其中的' @ ', ' . '替换成了'\0',也就是替换成了字符串结束标志字符,这样在打印或使用的时候都会使得前面的字符串成为一个看起来独立的字符串,即"2695855992"、"qq"、"com",这些字符串还是在源字符串中,只是后面都有了自己的字符串结束标志'\0'而已
还有一点,strtok的第一个参数不能是常量字符串的指针,由于上面我们提到,strtok分割函数时,是要对原字符串做出改变的,但传入的是常量字符串,是无法做出改变的,从而导致错误
strtok这个函数平时使用较少,但是其功能还是相当的便捷,但是使用一定要注意,一些注意事项。