1.字符串分割--strtok
C/C++:char *strtok(char s[], const char *delim);
s 代表需要分割的字符串,delim代表分割的标志,参数都为比选!返回指向分割部分的指针,如果没有分割成功就返回NULL.
一个简单的例子:
void main()
{
char *str = "jscese test strtok";
char *delim = " ";
char *pstr = NULL;
pstr = strtok(str, delim);
printf("the first str==%s \n", pstr);
while ((pstr = strtok(NULL, delim)) != NULL)
{
printf("the next str==%s \n", pstr);
}
}
以上看出第一次之后 分割之后,如果还要继续传的参数就是 NULL,因为strtok是把分割的标志位置设置成了 /0
分割完之后的字符串: jscese/0test/0strtok
所以往后的开头指针的位置都是/0处,所以传NULL。
以上结果为:
the first str==jscese
the next str==test
the next str==strtok
strtok函数为线程不安全的函数!因为它在处理分割一个字符串的时候,保存移动位置的指针变量是一个静态变量!
这样的话,在同一个字符串的处理中,如果有多个strtok的同时操作,就会指针错乱了,得不到想到的分割结果。
相对应的有线程安全的strtok_r函数。