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;
}
相关推荐
2401_8589368811 小时前
【Linux C 编程】标准 IO 详解与实战:从基础接口到文件操作实战
linux·c语言
季明洵13 小时前
C语言实现单链表
c语言·开发语言·数据结构·算法·链表
浅念-14 小时前
C语言编译与链接全流程:从源码到可执行程序的幕后之旅
c语言·开发语言·数据结构·经验分享·笔记·学习·算法
爱吃生蚝的于勒14 小时前
【Linux】进程信号之捕捉(三)
linux·运维·服务器·c语言·数据结构·c++·学习
The森14 小时前
Linux IO 模型纵深解析 01:从 Unix 传统到 Linux 内核的 IO 第一性原理
linux·服务器·c语言·经验分享·笔记·unix
C++ 老炮儿的技术栈15 小时前
Qt 编写 TcpClient 程序 详细步骤
c语言·开发语言·数据库·c++·qt·算法
wangjialelele16 小时前
Linux下的IO操作以及ext系列文件系统
linux·运维·服务器·c语言·c++·个人开发
wengqidaifeng18 小时前
数据结构(三)栈和队列(上)栈:计算机世界的“叠叠乐”
c语言·数据结构·数据库·链表
VekiSon18 小时前
Linux内核驱动——设备树原理与应用
linux·c语言·arm开发·嵌入式硬件
BlackQid19 小时前
深入理解指针Part5——回调函数及应用
c语言