Chinaunix首页 | 论坛 | 博客
  • 博客访问: 29187
  • 博文数量: 9
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 30
  • 用 户 组: 普通用户
  • 注册时间: 2015-09-30 13:29
文章分类

全部博文(9)

文章存档

2017年(9)

我的朋友

分类: LINUX

2017-06-16 11:18:28

1.strtok(),如下代码第14行输出的是b,第12行把第11行内部的this指针覆盖了,他们公用一个this指针。

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. int main()
  5. {
  6. char str1[]="a,b,c,d";
  7. char str2[]="1,2,3,4";
  8. char *ptr1=NULL;
  9. char *ptr2=NULL;
  10. char *ptr3=NULL;
  11. ptr2 = strtok(str2, ",");
  12. ptr1 = strtok(str1, ",");
  13. ptr3 = strtok(NULL, ",");
  14. printf("ptr3:%s\n",ptr3);//b

  15. return 0;
  16. }
2.strtok_r(),第三个参数相当于是自己各自的this指针,不会相互覆盖。

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. int main()
  5. {
  6.     //char str[]="ppp0,2012,3af1,5d3,3,a1b7,5bd3,7459,6f2f";
  7.     char str1[]="aa,bb,cc,dd";
  8.     char *ptr1=NULL;
  9.     char *saveptr1=NULL;
  10.     char str2[]="11,22,33,44";
  11.     char *ptr2=NULL;
  12.     char *saveptr2=NULL;
  13.     ptr1 = strtok_r(str1, ",",&saveptr1);
  14.     printf("ptr1:%s\n",ptr1);
  15.     printf("str1:%s\n",str1);
  16.     ptr2 = strtok_r(str2, ",",&saveptr2);
  17.     printf("ptr2:%s\n",ptr2);
  18.     ptr1 = strtok_r(NULL, ",",&saveptr1);
  19.     printf("ptr1:%s\n",ptr1);
  20.     ptr2 = strtok_r(NULL, ",",&saveptr2);
  21.     printf("ptr2:%s\n",ptr2);

  22.     return 0;
  23. }
总结:ptr1 = strtok(str1, ",")和ptr1 = strtok_r(str1, ",",&saveptr1);都会破坏原有str1的内容,此时ptr1和str1内容一致
   当第一个参数不为NULL时,从第一个参数开始截取,当第一个参数为NULL时,从内部指针指向的位置开始截取
   strtok从内部this指针指向的位置开始截取,strtok_r从saveptr1指向的位置开始截取。

阅读(1411) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~