当前位置:酷酷问答>生活百科>如何正确使用c语言strtok函数

如何正确使用c语言strtok函数

2024-09-10 00:36:34 编辑:zane 浏览量:595

如何正确使用c语言strtok函数

的有关信息介绍如下:

如何正确使用c语言strtok函数

编写代码时,对字符串进行分析是最常见的任务。c语言中提供了一些字符串操作函数,如字符串拷贝、字符串连接、字符串长度计算、字符串查找等操作。

虽然c语言没有提供字符串分解split函数,但我们可以使用提供的strtok函数分割字符串。

本文介绍如何正确的使用c语言strtok函数。

strtok函数用来分解字符串,但是不像其他高级语言中split分解字符串返回数组,strtok只是分解字符串下一段内容。

我们看一下通常的strtok用法,如下所示:

strtok调用步骤:

1. 第一次调用strtok函数时,传递原始字符串以及分解字符串。

2. 之后再调用strtok函数时,只需要传递NULL和分解字符串。

函数返回值为分解得到字符串指针,当最后为NULL时,循环退出。

特别注意的是:strtok对原始字符串的一个副作用是,它会修改原始字符串,在匹配到分解字符串时,设置为字符串结束符0。

在实际编程时,笔者发现有时候因为使用strtok函数,有些想当然的用法。比如,对strtok函数的返回值的判断。

很多人可能以为strtok如果未找到分解字符串时会返回NULL,这其实就大错特错了。

通过对strtok函数的调用,我们发现并没有很方便,尤其是相比c语言中已经提供了字符串匹配函数strstr/strchr的情况下。

我们完全可以自己在循环中使用strstr/strchr等函数实现字符串分解,所以,这就是strtok函数使用场景太少,从而不常用造成生疏的原因。

比如,我们用strchr实现上述分割运算如下:

还一个注意点是:strtok函数不是线程安全函数。

在循环中调用strtok函数时,我们给strtok函数传递了NULL指针,那么函数怎么知道从原始字符串中哪个位置继续执行分解操作呢?

不难猜测,strtok函数内部使用了静态变量,保存了下一次分解起始位置。对于多线程调用strtok函数时,使用静态全局变量会被多个线程重复改变,造成错乱等问题。

一个可能的strtok函数的实现:

幸好,在windows环境中提供了strtok_s,而linux函数中提供了strtok_r安全函数。

这两个函数相比strtok多了一个保存中间指针变量的参数,这样就不用使用静态变量,从而保证多线程调用的安全性。

所以,如果使用strtok,更推荐使用strtok_r版本。

版权声明:文章由 酷酷问答 整理收集,来源于互联网或者用户投稿,如有侵权,请联系我们,我们会立即处理。如转载请保留本文链接:https://www.kukuwd.com/life/28895.html
热门文章