1、strtok函数

函数原型:char * strtok (char *str, const char * delimiters);
參数:str,待切割的字符串(c-string);delimiters,切割符字符串。
该函数用来将字符串切割成一个个片段。參数str指向欲切割的字符串,參数delimiters则为切割字符串中包括的全部字符。当strtok()在參数s的字符串中发现參数delimiters中包涵的切割字符时,则会将该字符改为\0
字符。在第一次调用时,strtok()必需给予參数s字符串,往后的调用则将參数s设置成NULL。每次调用成功则返回指向被切割出片段的指针。
须要注意的是,使用该函数进行字符串切割时,会破坏被分解字符串的完整,调用前和调用后的s已经不一样了。第一次切割之后,原字符串str是切割完毕之后的第一个字符串,剩余的字符串存储在一个静态变量中,因此多线程同一时候訪问该静态变量时,则会出现错误。
strtok样例:
#include <stdio.h>
#include <stdlib.h>
#include <string.h> int main()
{
char str[]="ab,cd,ef";
char *ptr;
printf("before strtok: str=%s\n",str);
printf("begin:\n");
ptr = strtok(str, ",");
while(ptr != NULL){
printf("str=%s\n",str);
printf("ptr=%s\n",ptr);
ptr = strtok(NULL, ",");
}
system("pause");
return 0;
}

输出结果例如以下:

before strtok:  str=ab,cd,ef

begin:

str=ab

ptr=ab

str=ab

ptr=cd

str=ab

ptr=ef

2、strtok_s函数

strtok_s是windows下的一个切割字符串安全函数,其函数原型例如以下:
char
*strtok_s( char *strToken, const char *strDelimit, char **buf);
这个函数将剩余的字符串存储在buf变量中,而不是静态变量中,从而保证了安全性。

3、strtok_r函数

strtok_s函数是linux下切割字符串的安全函数,函数声明例如以下:
char
*strtok_r(char *str, const char *delim, char **saveptr);
该函数也会破坏带分解字符串的完整性,可是其将剩余的字符串保存在saveptr变量中,保证了安全性。
样例:
#include <stdio.h>
#include <stdlib.h>
#include <string.h> int main()
{
char str[]="ab,cd,ef";
char *ptr;
char *p;
printf("before strtok: str=%s\n",str);
printf("begin:\n");
ptr = strtok_r(str, ",", &p);
while(ptr != NULL){
printf("str=%s\n",str);
printf("ptr=%s\n",ptr);
ptr = strtok_r(NULL, ",", &p);
}
return 0;
}

输入结果:

before strtok:  str=ab,cd,ef

begin:

str=ab

ptr=ab

str=ab

ptr=cd

str=ab

ptr=ef


strtok、strtok_s、strtok_r 字符串切割函数的更多相关文章

  1. strtok、strtok_s、strtok_r 字符串分割函数

    1.strtok函数 函数原型:char * strtok (char *str, const char * delimiters); 参数:str,待分割的字符串(c-string):delimit ...

  2. (十六)strtok、strtok_s、strtok_r 字符串分割函数

    1.strtok函数 函数原型:char * strtok (char *str, const char * delimiters); 参数:str,待分割的字符串(c-string):delimit ...

  3. sql 字符串 切割函数 FUN_Split

    IF EXISTS ( SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[FUN_Split]') AND OBJECTPROPER ...

  4. C语言 字符串切割

    #include <stdio.h> #include <stdlib.h> #include <string.h> /* 字符串切割函数 */ /* 知识补充: ...

  5. 字符串分割函数 STRTOK & STRTOK_R (转)

    1.一个应用实例 网络上一个比较经典的例子是将字符串切分,存入结构体中.如,现有结构体 typedef struct person{     char name[25];     char sex[1 ...

  6. 从标准输入读取一行数组并保存(用的是字符串分割函数strtok_s() )

    首先介绍字符串分割函数: char *strtok_s( char *strToken, //字符串包含一个标记或一个以上的标记. const char *strDelimit, //分隔符的设置 c ...

  7. [转]关于strtok和strtok_r函数的深度研究

    在linux环境下,字符串分割的函数中,大家比较常用的是strtok函数,这个函数用处很大,但也有一些问题,以下将深度挖掘一下这个函数的用法,原理,实现,其次,该函数是不可再入函数,但是在linux ...

  8. 关于函数strtok和strtok_r的使用要点和实现原理(二)

    http://www.cnblogs.com/stemon/p/4013264.html已经介绍了使用strtok函数的一些注意事项,本篇将介绍strtok的一个应用并引出strtok_r函数. 1. ...

  9. shell脚本调用C语言之字符串切分函数——strtok

    今天上午在写一个需求,要求的比较急,要求当天完成,我大致分析了一下,可以采用从shell脚本中插入一连串的日期,通过调用proc生成的可执行文件,将日期传入后台数据库,在数据库中进行计算.需要切分日期 ...

随机推荐

  1. C#获取FTP文件详细备注信息

    private void button1_Click(object sender, RoutedEventArgs e) { Uri uri = new Uri("ftp://192.168 ...

  2. pthread_t定义结构

    linux下被定义为: 在linux履行pthread_t它被定义为 "unsigned long int",参考这里 Windows下这样定义: /* * Generic han ...

  3. sql server基本流程语句

  4. Ubuntu 下一个 vim 建立python 周围环境 构造

    于Windows通过使用各种现成的工具使用,去Linux下一个,没有一个关于线索--总之google有些人的经验,折腾来折腾,开发环境也算是一个好工作. 1. 安装完成vim # apt-get in ...

  5. Timus 1777. Anindilyakwa 奇怪的问题计数

    The language of Australian aborigines anindilyakwa has no numerals. No anindilyakwa can say: "I ...

  6. 玩转html5(四)----使用canvas画一个时钟(可以动的哦!)

    先给个效果图,我画的比较丑,大家可以自己美化一下, 直接上代码: <!DOCTYPE html> <meta charset="utf-8"> <ht ...

  7. Mongodb入门——安装与配置

    作者:zhanhailiang 日期:2014-11-07 1. 安装mongodb: [root@~/wade/nodejs/nodeclub]# yum search mongodb [root@ ...

  8. 将EBS设为首页worklist删除误报

    参考:How To Remove Error Notifications From The Worklist (Doc ID 357904.1) 1.1. Use one of the error n ...

  9. 进程和线程之间的关系和区别 和 CPU牒

    流程具有一定独立功能的程序关于某个数据集合上的一次执行活动,进程是系统进行资源分配和调度的一个独立单位. 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立执行的基本单位. 进 ...

  10. 基于struct2完整的用户登录

    第一lib在导入struct2相应jar包 在web.xml组态struct2过滤器 <filter> <filter-name>struts2</filter-name ...