strtok和strtok_r

本文介绍了strtok和strtok_r两个字符串分割函数的用法。strtok在处理字符串时会对原字符串进行修改,不适用于多线程环境。strtok_r作为线程安全的版本,通过用户提供的保存指针避免了全局变量冲突。
摘要由CSDN通过智能技术生成

最新项目开发上需要用到字符串分割识别功能,了解到strtok用法,简单总结下。

strtok
函数原型char* strtok(char *str,const char *delimiters);

来分析一下这个分割字符串函数,这个函数是在传入的字符数组里进行调整,它并没有生成新的字符数组。
第一个参数可以是字符数组或者NULL,第一次切割传要切割的字符,第二次要在原来字符数组上继续切割就传NULL;

第二个参数传入的是切割符,这个参数看起来简单其实是比第一个还复杂,它传入的是一个字符串,而不是一个字符。

使用strtok注意事项
1)对同一个字符数组切割,第一个形参使用时候记得非第一次次分割,传的是NULL。
2)还有就是它会对源字符串修改,如果源字符串还要继续使用的话,先利用strcpy一个临时字符数组,在实现字符分割。
3)压入第一个形参是传字符数组,不能传const char *类型,这样是字符串常量不能进行修改。
4)我们传入的第二个形参是字符串,不是字符,意味着是“ ” ,是双引号,不是单引号‘ ’哪怕只有一个字符
5)在使用线程中,使用strtok是不安全的,因为他们共享全局变量,strtok的内部静态指针会被所有线程共享,所以才引出了我们strtok_r这个函数,我们下面会去讲解下。

函数strtok_r是函数strtok的可重入版本,也即线程安全版本。在函数strtok中剩余字符串是存储在一个静态变量中,因此,多线程在使用该静态变量时引起冲突;而strtok_r则使用用户传入的指针为每个用户saveptr重新申请变量࿰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值