C语言 strtok线程不安全

一、strtok()函数作用:

用于分割字符串 (tokenize),按照指定的分隔符字符集把字符串拆分成若干个"子串"(token)。

每次调用返回一个子串的指针,没有更多 token 时:返回 NULL

strtok()修改原字符串 ,在分隔符位置写入 '\0'

二、为什么线程不安全?

strtok() 在内部使用了一个 静态全局指针 来记录上一次解析的位置。

这意味着:

  • 如果两个线程同时调用 strtok(),它们会互相覆盖内部状态;

  • 即使在同一线程里解析多个字符串(没重置),也会被破坏。

三、参考示例

复制代码
#include <stdio.h>
#include <string.h>

int main() {
    char str[] = "apple,banana,orange";
    char *token;

    token = strtok(str, ",");
    while (token != NULL) {
        printf("%s\n", token);
        token = strtok(NULL, ",");
    }

    return 0;
}
相关推荐
请注意这个女生叫小美3 分钟前
C语言 实例20 25
c语言·开发语言·算法
枫叶丹48 分钟前
【Qt开发】Qt系统(十一)-> Qt 音频
c语言·开发语言·c++·qt·音视频
v_for_van10 分钟前
力扣刷题记录3(无算法背景,纯C语言)
c语言·算法·leetcode
༾冬瓜大侠༿31 分钟前
C++string
c语言·开发语言·c++·算法
Tingjct12 小时前
【初阶数据结构-二叉树】
c语言·开发语言·数据结构·算法
飞机和胖和黄13 小时前
考研之王道C语言第三周
c语言·数据结构·考研
醉颜凉13 小时前
【LeetCode】打家劫舍III
c语言·算法·leetcode·树 深度优先搜索·动态规划 二叉树
一匹电信狗13 小时前
【LeetCode_21】合并两个有序链表
c语言·开发语言·数据结构·c++·算法·leetcode·stl
卢锡荣16 小时前
Type-c OTG数据与充电如何进行交互使用应用讲解
c语言·开发语言·计算机外设·电脑·音视频
v_for_van16 小时前
力扣刷题记录2(无算法背景,纯C语言)
c语言·算法·leetcode