一、函数strtok_r的作用
 函数strtok_r可以将一个字符串按照指定的分割符进行分割,例如将字符串:"hello, jason, please come here",按照","分割为:
"hello"
"jason"
"please come here"
也可以按照分隔符" "分割为:
"hello,"
"jason,"
"please"

"come"

"here"

二、函数strtok_r说明及其注意事项
函数strtok_r是函数strtok的可重入版本,也即线程安全版本。在函数strtok中剩余字符串是存储在一个静态变量中,因此,多线程在使用该静态变量时引起冲突;而strtok_r则使用用户传入的指针为每个用户saveptr重新申请变量,因而可以保证线程安全。其定义形式为:
#include <string.h>
char *strtok(char *str, const char *delim);
char *strtok_r(char *str, const char *delim, char **saveptr);
其中:
       char *str是被分割字符串,如上面例子中的"hello, jason, please come here",第一次调用函数strtok_r时此指针一定不能为空,连续分割同一个字符串时,第一调用之后的调用需将str设置为NULL。
       const char *delim是分隔符,也是个字符串指针,例如上面例子中的","或者" "。
       char **saveptr是一个供内部使用的指针,用于保存上次分割剩下的字串。
       返回值是个指针,用于返回从被分割字符串中得到的第一个目标子串。

注意:虽然函数strtok_r可以将一个字符串进行分割,但是每次分割只能得到第一个被分割的字串,例如:按照" "分割"hello, jason, please come here"时,
       第一次调用strtok_r,参数str所指向的内存中存放被分割字符串"hello, jason, please come here",参数delim为分隔符串" "的指针,saveptr指向一个空指针变量,得到"hello,";同时saveptr中就保存了剩下的子串"jason, please come here";
       第二次调用strtok_r,参数str设置为空,参数delim和saveptr不变,得到"jason,",同时saveptr中保存了剩下的子串"please come here";
       第三次调用strtok_r(同第二次)得到"please come here";

三、示例代码

下面是一个测试函数,主要测试strtok_r函数的用法。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
 char pSrc[] = "this/is/jason;/i/am/from/xi'an/china";
 char* pToken = NULL;
 char* pSave = NULL;
 char* pDelimiter = "/";
 pToken = strtok_r(pSrc, pDelimiter, &pSave);
 printf("Begin:\n");
 while(pToken){
  printf("   pToken[%s]; pSave[%s]\n",pToken,pSave);
  pToken = strtok_r(NULL, pDelimiter, &pSave);
 }
 printf("End!\n");
 return 0;
}
其输出结果为:
Begin:
   pToken[this]; pSave[is/jason;/i/am/from/xi'an/china]
   pToken[is]; pSave[jason;/i/am/from/xi'an/china]
   pToken[jason;]; pSave[i/am/from/xi'an/china]
   pToken[i]; pSave[am/from/xi'an/china]
   pToken[am]; pSave[from/xi'an/china]
   pToken[from]; pSave[xi'an/china]
   pToken[xi'an]; pSave[china]
   pToken[china]; pSave[]
End!

字符串分割函数strtok_r的用法相关推荐

  1. 分割字符串split函数的正确用法(切片)

    分割字符串split函数的正确用法(切片) split函数是将字符串分割为列表 函数原型: str.split(sep,maxsplit) 参数说明: str:表示要进行分割的字符串 sep:用于指定 ...

  2. PHP字符串分割函数explode,strtok,str_spli的用法

    PHP字符串函数在PHP网站开发中广泛使用,比如使用PHP字符串函数对字符串分割.截取.匹配.替换等处理.PHP字符串函数对于PHP入门学习者来说必不可少,本文将主要介绍PHP字符串分割函数处理心得, ...

  3. php mysql字符串截取比较读取_MySQL_Mysql字符串截取函数SUBSTRING的用法说明,感觉上MySQL的字符串函数截取 - phpStudy...

    Mysql字符串截取函数SUBSTRING的用法说明 感觉上MySQL的字符串函数截取字符,比用程序截取(如PHP或JAVA)来得强大,所以在这里做一个记录,希望对大家有用. 函数: 1.从左开始截取 ...

  4. 探索C语言之字符串分割函数:strtok和strsep的区别

    探索C语言之字符串分割函数:strtok和strsep的区别 概述 strsep - extract token from string(linux 下) strtok, strtok_r - ext ...

  5. c语言中字符切割函数split,c 语言 指针 C语言字符串分割函数split实现

    c语言也有类似其他语言的split字符串分割函数,就是strtok使用方法如下://用逗号做分隔符,读出内容//char s[] = "123-sldkf-123ls-343434-dfjd ...

  6. c语言将字符串按空格分割_如何在c++中实现字符串分割函数split详解

    前言 在学习c++中string相关基本用法的时候,发现了sstream的istringstream[1]可以将字符串类似于控制台的方式进行输入,而实质上这个行为等同于利用空格将一个字符串进行了分割, ...

  7. C++中string如何实现字符串分割函数split()——4种方法

    如: string str1 = "This is a test"; string str2 = "This-is-a-test"; string str2 = ...

  8. 字符串分割函数--strtok与strsep

    在c/c++中,字符串分割函数主要有两种:一是strtok函数,另一个就是strsep函数.下面我们对这两个函数作一个详细解释说明. 1.strtok 原形: char* strtok(char *s ...

  9. Split字符串分割函数

    非常非常常用的一个函数Split字符串分割函数. Dim myTest myTest = "aaa/bbb/ccc/ddd/eee/fff/ggg"Dim arrTest arrT ...

最新文章

  1. Free Lunch for Few-Shot Learning: Distribution Calibration(ICLR 2021)
  2. 739. Daily Temperatures
  3. OpenCV中使用神经网络 CvANN_MLP
  4. java 写入环境变量_Java环境变量配置 - import_key的个人空间 - OSCHINA - 中文开源技术交流社区...
  5. Spring MVC 中 HandlerInterceptorAdapter的使用
  6. 金融时报:人工智能在银行中的应用—对全球30家大型银行的调查
  7. tensorflow越跑越慢_tensorflow如何解决越运行越慢的问题
  8. JSF MVC 流程
  9. 【CCF】201409-2 画图
  10. linux mount 日志,mount
  11. Number 和 Math 类
  12. vue的activated和deactivated生命周期
  13. 建设工程项目全寿命周期管理是指_(必过)2020年二建机电《施工管理》考前必背精华知识点整理一...
  14. conflicting declaration ‘typedef struct LZ4_stream_t LZ4_stream_t’解决
  15. Sprite Editor 图集切片精灵
  16. python安装包下载及安装(超详细)
  17. Word VBA-标题设置
  18. CentOS命令行模式下设置屏幕常亮----没有达到预期效果
  19. 富途出海淘金:泡沫翻涌 焦虑不止
  20. iOS: 仿新浪微博 OC (持续更新ing)

热门文章

  1. 例子---PHP与Form表单之一
  2. day31 java的多线程(1)
  3. Java 打印 99 乘法表
  4. 服务器压力测试怎么做_做手游怎么选服务器?
  5. 把网站图片和php程序分离,我的图片服务器和WEB应用服务器相分离的简单方案
  6. 【2021-01-14】navicat使用ssh tunnel、密钥方式连接数据库的问题。错误:Unable to load key - unrecognised cipher name
  7. 睡眠多少分钟一个循环_睡眠分为几个阶段每个阶段大概多少时间?
  8. mysql调优explain_MySql性能调优利器之Explain
  9. 2_数据分析—认识pandas
  10. java体系的四大基类_Java中的io流学习(了解四大基类和基本步骤)