头文件 <string.h>
一、strtok
.原型 char * strtok(char * s,const char * delim);
功能 对字符串进行分段处理,每次调用strtok,返回由delim中任意一个字符分隔的一段字符串。
参数说明:@s:输入字符串,且该字符串不能为const类型。
@delim:所有用于将@s进行分隔的字符
@return:每调用一次,返回字符串中的一段,以'\0'结束
使用注意:第一次调用,传s进去,后面的调用都传NULL。
函数实现原理:将@s中的所有delim字符都替换为‘\0',即原来字符串自动被分为多段,当传入的@s为NULL时,自动调用下一段;@s不为NULL时,返回从@s开始的第一段
eg.
char s[] = "111:222";
char *p = strtok (s, ":");
printf ("%s\r\n", p); //打印出111
printf ("%s\r\n", s); //同样打印出111,因为原来@s中的":"被替换为'\0',截断了字符串。
p = strtok (NULL, ":"); //注意传入参数为NULL。
printf ("%s\r\n", p); //打印出222,原@s的第二段字符串
二、strtok_r
原型 char *strtok_r(char *s, const char *delim, char **save);
功能 与strtok一样,只是额外提供了线程安全功能
参数@save,定义的一个空指针,在调用strtok_r函数时,将其地址( &save )传入函数,用于保存下一个字符串的起始位置
eg.
char s[] = "111:222";
char *save = NULL;
char *p = strtok_r (s, ":", &save); //传入save的地址
printf ("%s\r\n", p); //打印出111
printf ("%s\r\n", save); // @@@@@@@@@注意:打印出222,save指向下一段的开始
三、总结
strtok函数,在执行一次之后,在函数内部使用一个变量保存下一个分段的位置。
strtok_r函数,在执行一次之后,由用户定义的一个指针保存下一个分段的位置。
微弱的区别。
来源:CSDN
作者:qiuwunogu
链接:https://blog.csdn.net/qiuwunogu/article/details/51502975