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;
}
相关推荐
BreezeJuvenile4 分钟前
基于C语言的SPSC环形缓冲区程序实现
c语言·环形缓冲区
SuperByteMaster21 分钟前
recursive mutex的使用场景和场景代码
c语言
caimouse2 小时前
ReactOS 窗口系统架构分析
服务器·c语言
caimouse2 小时前
ReactOS 图形系统分析(46):DC 工具 — dcutil.c
c语言·开发语言
BreezeJuvenile2 小时前
嵌入式C语言常见考察点(2)
c语言·嵌入式
caimouse2 小时前
ReactOS 图形系统分析(50):画笔子系统 — pen.c
c语言·开发语言·stm32
caimouse3 小时前
ReactOS 图形系统分析(48):弧线绘制 — arc.c
c语言·开发语言
cypking4 小时前
Objective-C 语法完整学习手册(小白自学 + 开发备查)
c语言·开发语言·学习·objective-c
wuyk55513 小时前
98.C语言易混难点:字符数组与字符串指针的底层差异
c语言·开发语言·c++·stm32·嵌入式硬件·算法
wp123_114 小时前
IPX8 防水 Type‑C连接器:安费诺 124018792112A 与 TONEVEE TY48087‑24A 技术梳理
c语言·开发语言