Chinaunix首页 | 论坛 | 博客
  • 博客访问: 102971
  • 博文数量: 24
  • 博客积分: 105
  • 博客等级: 民兵
  • 技术积分: 244
  • 用 户 组: 普通用户
  • 注册时间: 2012-02-09 20:05
文章分类

全部博文(24)

文章存档

2015年(1)

2014年(9)

2013年(10)

2012年(4)

我的朋友

分类: C/C++

2013-05-16 12:37:06

strtok函数主要用于字符串的分割,函数原型如下:
char *strtok(char *str, const char *delim);

在linux下使用man strtok可以得到关于函数的介绍。

第一次想到要使用strtok是需要对一个字符串进行分割的时候,看了一眼函数介绍就开始使用,结果可想而知没有达到效果。
当时没有那个耐心仔细看strtok的manual介绍,由于分隔符很有特点的是一个字符,果断使用了char * strchr(const char * s, int c)函数分割。

 The  strtok() function parses a string into a sequence of tokens.  On the first call to strtok() the string to be parsed should be specified in str.  In each subsequent call that should parse the same string, str should be NULL.
这句话的意思是,strtok会把第一个参数str分割成一系列的token。第一次调用strtok的第一个参数为str本身,后面传入NULL。

strtok实现的时候肯定用了一个静态变量保存了下一次需要分割的地址。strtok改变了字符串str中的内容,把分割符换成了0(不是字符)
那么strtok使用静态变量就不是可重入函数,使用时得小心

使用范例如下:
int main(void)
{
    char str[] = "cat,dog,horse,cow,tigger,lion", *p;
    p = strtok(str, ",");
    printf("%s\n", p);
    while(p = strtok(NULL, ","))
    {
           printf("%s\n", p);
    }
    return 0;
}

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