字符串分割函数strtok_r的用法
一、函数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的用法相关推荐
- 分割字符串split函数的正确用法(切片)
分割字符串split函数的正确用法(切片) split函数是将字符串分割为列表 函数原型: str.split(sep,maxsplit) 参数说明: str:表示要进行分割的字符串 sep:用于指定 ...
- PHP字符串分割函数explode,strtok,str_spli的用法
PHP字符串函数在PHP网站开发中广泛使用,比如使用PHP字符串函数对字符串分割.截取.匹配.替换等处理.PHP字符串函数对于PHP入门学习者来说必不可少,本文将主要介绍PHP字符串分割函数处理心得, ...
- php mysql字符串截取比较读取_MySQL_Mysql字符串截取函数SUBSTRING的用法说明,感觉上MySQL的字符串函数截取 - phpStudy...
Mysql字符串截取函数SUBSTRING的用法说明 感觉上MySQL的字符串函数截取字符,比用程序截取(如PHP或JAVA)来得强大,所以在这里做一个记录,希望对大家有用. 函数: 1.从左开始截取 ...
- 探索C语言之字符串分割函数:strtok和strsep的区别
探索C语言之字符串分割函数:strtok和strsep的区别 概述 strsep - extract token from string(linux 下) strtok, strtok_r - ext ...
- c语言中字符切割函数split,c 语言 指针 C语言字符串分割函数split实现
c语言也有类似其他语言的split字符串分割函数,就是strtok使用方法如下://用逗号做分隔符,读出内容//char s[] = "123-sldkf-123ls-343434-dfjd ...
- c语言将字符串按空格分割_如何在c++中实现字符串分割函数split详解
前言 在学习c++中string相关基本用法的时候,发现了sstream的istringstream[1]可以将字符串类似于控制台的方式进行输入,而实质上这个行为等同于利用空格将一个字符串进行了分割, ...
- C++中string如何实现字符串分割函数split()——4种方法
如: string str1 = "This is a test"; string str2 = "This-is-a-test"; string str2 = ...
- 字符串分割函数--strtok与strsep
在c/c++中,字符串分割函数主要有两种:一是strtok函数,另一个就是strsep函数.下面我们对这两个函数作一个详细解释说明. 1.strtok 原形: char* strtok(char *s ...
- Split字符串分割函数
非常非常常用的一个函数Split字符串分割函数. Dim myTest myTest = "aaa/bbb/ccc/ddd/eee/fff/ggg"Dim arrTest arrT ...
最新文章
- Free Lunch for Few-Shot Learning: Distribution Calibration(ICLR 2021)
- 739. Daily Temperatures
- OpenCV中使用神经网络 CvANN_MLP
- java 写入环境变量_Java环境变量配置 - import_key的个人空间 - OSCHINA - 中文开源技术交流社区...
- Spring MVC 中 HandlerInterceptorAdapter的使用
- 金融时报:人工智能在银行中的应用—对全球30家大型银行的调查
- tensorflow越跑越慢_tensorflow如何解决越运行越慢的问题
- JSF MVC 流程
- 【CCF】201409-2 画图
- linux mount 日志,mount
- Number 和 Math 类
- vue的activated和deactivated生命周期
- 建设工程项目全寿命周期管理是指_(必过)2020年二建机电《施工管理》考前必背精华知识点整理一...
- conflicting declaration ‘typedef struct LZ4_stream_t LZ4_stream_t’解决
- Sprite Editor 图集切片精灵
- python安装包下载及安装(超详细)
- Word VBA-标题设置
- CentOS命令行模式下设置屏幕常亮----没有达到预期效果
- 富途出海淘金:泡沫翻涌 焦虑不止
- iOS: 仿新浪微博 OC (持续更新ing)
热门文章
- 例子---PHP与Form表单之一
- day31 java的多线程(1)
- Java 打印 99 乘法表
- 服务器压力测试怎么做_做手游怎么选服务器?
- 把网站图片和php程序分离,我的图片服务器和WEB应用服务器相分离的简单方案
- 【2021-01-14】navicat使用ssh tunnel、密钥方式连接数据库的问题。错误:Unable to load key - unrecognised cipher name
- 睡眠多少分钟一个循环_睡眠分为几个阶段每个阶段大概多少时间?
- mysql调优explain_MySql性能调优利器之Explain
- 2_数据分析—认识pandas
- java体系的四大基类_Java中的io流学习(了解四大基类和基本步骤)