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;
}
相关推荐
沐晓时光7 小时前
C语言入门,内存函数知识讲解
c语言·开发语言
Zwawa10 小时前
C语言函数指针与宏实战:从回调、表驱动菜单到X-Macro,讲透嵌入式代码解耦
c语言·单片机·嵌入式
David猪大卫13 小时前
【C++修炼】map 和 set 的使用
c语言·开发语言·数据结构·c++·经验分享·笔记·学习
HPtiger13 小时前
C++ 入门笔记:从 C 到 C++ 的核心过渡(命名空间、输入输出、缺省参数、重载、引用、内联)
c语言·c++·学习
安妮细水长流17 小时前
ad7124
c语言·单片机
Zwawa1 天前
用两个按键做一个OLED菜单:先把选择和执行分开
c语言·单片机·嵌入式
心仪久了会沦陷2 天前
C语言数据结构入门——树与二叉树详解:概念、堆实现与链式遍历
c语言·数据结构·算法
Severus_black2 天前
【C++初阶】list使用及相关实现,思路顺滑流畅!
c语言·数据结构·c++·stl·list
希和20272 天前
C语言程序设计题|有序数组插入数字冒泡排序
c语言·数据结构·算法
Zwawa2 天前
屏幕不止一种:OLED、LCD1602字符屏、TFT/IPS图形屏和串口屏怎么用,这与TTY和PTY又有什么关系
c语言·单片机·嵌入式