1.strtok(),如下代码第14行输出的是b,第12行把第11行内部的this指针覆盖了,他们公用一个this指针。
-
#include <stdio.h>
-
#include <stdlib.h>
-
#include <string.h>
-
int main()
-
{
-
char str1[]="a,b,c,d";
-
char str2[]="1,2,3,4";
-
char *ptr1=NULL;
-
char *ptr2=NULL;
-
char *ptr3=NULL;
-
ptr2 = strtok(str2, ",");
-
ptr1 = strtok(str1, ",");
-
ptr3 = strtok(NULL, ",");
-
printf("ptr3:%s\n",ptr3);//b
-
-
return 0;
-
}
2.strtok_r(),第三个参数相当于是自己各自的this指针,不会相互覆盖。
-
#include <stdio.h>
-
#include <stdlib.h>
-
#include <string.h>
-
int main()
-
{
-
//char str[]="ppp0,2012,3af1,5d3,3,a1b7,5bd3,7459,6f2f";
-
char str1[]="aa,bb,cc,dd";
-
char *ptr1=NULL;
-
char *saveptr1=NULL;
-
char str2[]="11,22,33,44";
-
char *ptr2=NULL;
-
char *saveptr2=NULL;
-
ptr1 = strtok_r(str1, ",",&saveptr1);
-
printf("ptr1:%s\n",ptr1);
-
printf("str1:%s\n",str1);
-
ptr2 = strtok_r(str2, ",",&saveptr2);
-
printf("ptr2:%s\n",ptr2);
-
ptr1 = strtok_r(NULL, ",",&saveptr1);
-
printf("ptr1:%s\n",ptr1);
-
ptr2 = strtok_r(NULL, ",",&saveptr2);
-
printf("ptr2:%s\n",ptr2);
-
-
return 0;
-
}
总结:ptr1 = strtok(str1, ",")和ptr1 = strtok_r(str1, ",",&saveptr1);都会破坏原有str1的内容,此时ptr1和str1内容一致。
当第一个参数不为NULL时,从第一个参数开始截取,当第一个参数为NULL时,从内部指针指向的位置开始截取
strtok从内部this指针指向的位置开始截取,strtok_r从saveptr1指向的位置开始截取。
阅读(1411) | 评论(0) | 转发(0) |