Chinaunix首页 | 论坛 | 博客
  • 博客访问: 388280
  • 博文数量: 85
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1707
  • 用 户 组: 普通用户
  • 注册时间: 2013-08-27 11:18
个人简介

学无止境……

文章分类

全部博文(85)

分类: C/C++

2014-07-24 18:23:39

作用:用于分割字符串
 #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 中有说明: 
                            

  1. #include<stdio.h>
  2. #include<string.h>
  3. int main()
  4. {
  5.     char string[] = "LuoYe male 24 ,Xdp female 23";
  6.     char *inp = NULL, *outp = NULL, *contact, *str = string, *info;

  7.     while( NULL != (contact = strtok_r(str, ",", &inp)))
  8.     {
  9.         // str = NULL;
  10.         while(NULL != (info = strtok_r(contact, " ", &outp)))
  11.         {
  12.             printf("%s ", info);
  13.             contact = NULL;
  14.         }
  15.         str = NULL;
  16.         printf("\n");
  17.         
  18.     }
  19. return 0;
  20. }
    关于函数strtok和strtok_r的使用要点和实现原理
阅读(2336) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~