作用:用于分割字符串
#include
char *strtok(char *str, const char *delim); // 内部定义了一个 static 指针,分割字符串时用‘/0’替换字串中的分隔符,分割指针指向被替换字符的下一个字符。
char *strtok_r(char *str, const char *delim, char **saveptr); // strtok_r用saveptr 保存分割指针
1,把 str 中的 delim 替换为
‘/0’ ,
2,delim 中可能是多个分割字符,如“!@#” 代表是的是 ! @ # 三个分割符,而不是 !@# 一个字符,!,@,#中的任何一个都可以把字符串分割。
3,一定不能把字符串直接作为
str参数,并且作为
str 参数的一定不能是常量
,函数会修改 str 值,应把字符串地址赋给一个指针后作为 str 参数。
4,推荐使用 strtok_r() 替代 strtok(). 因为strtok() 内部用的是static保存分割指针,是不可重入类型函数,对线程不安全。
man 中有说明:
-
#include<stdio.h>
-
#include<string.h>
-
int main()
-
{
-
char string[] = "LuoYe male 24 ,Xdp female 23";
-
char *inp = NULL, *outp = NULL, *contact, *str = string, *info;
-
-
while( NULL != (contact = strtok_r(str, ",", &inp)))
-
{
-
// str = NULL;
-
while(NULL != (info = strtok_r(contact, " ", &outp)))
-
{
-
printf("%s ", info);
-
contact = NULL;
-
}
-
str = NULL;
-
printf("\n");
-
-
}
-
return 0;
-
}
关于函数strtok和strtok_r的使用要点和实现原理
阅读(2445) | 评论(0) | 转发(0) |