C 语言 strtok 函数超详细讲解(推荐)

 更新时间:2026年06月10日 09:46:15   作者:WYH287  
在C语言中,strtok函数是一个用于分割字符串的函数,本文给大家介绍C 语言strtok 函数超详细讲解,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧

一、strtok 是啥?(一句话)

strtok = 字符串切割函数
作用:把一长串字符串,按照你指定的符号,切成一段一段的小字符串。

比如:

"LED,ON,1"

, 切割 → 切成

"LED"   "ON"   "1"

二、函数原型

char *strtok(char *str, const char *delim);
  • str:要切割的原始字符串
  • delim分隔符(比如 , : \r\n
  • 返回值:切出来的第一段字符串

三、最简单例子(一看就会)

#include <string.h>
#include <stdio.h>
int main()
{
    char buf[] = "LED,ON,1";  // 要切割的字符串
    char *token;              // 存放切出来的片段
    // 第一次调用:传入字符串 + 分隔符
    token = strtok(buf, ",");
    printf("第1段:%s\n", token);  // LED
    // 第二次调用:传入 NULL + 分隔符
    token = strtok(NULL, ",");
    printf("第2段:%s\n", token);  // ON
    // 第三次调用
    token = strtok(NULL, ",");
    printf("第3段:%s\n", token);  // 1
}

输出:

第1段:LED
第2段:ON
第3段:1

四、strtok 最关键规则(必须记)

  1. 第一次调用:必须传入要切割的字符串
  2. 后面调用:必须传 NULL
    传 NULL = 继续切上次剩下的字符串
  3. 切完了 → 返回 NULL

五、你在 STM32 里用来干嘛?

用来解析串口指令!

比如串口收到:

"LED,ON,1"
"LED,OFF,2"
"MOTOR,SPEED,500"

用 strtok 切割后:

  • 第一段:对象(LED/MOTOR)
  • 第二段:命令(ON/OFF/SPEED)
  • 第三段:参数(1/2/500)

这就是你那个命令解析框架的核心!

六、strtok 超级大坑(必看!发CSDN爆款)

❌ 大坑 1:strtok会破坏原始字符串

它会把分隔符变成 \0
所以 不能传常量字符串

strtok("LED,ON,1", ",");  // ❌ 崩溃!

必须用 数组

char buf[] = "LED,ON,1";  // ✅ 正确
strtok(buf, ",");

❌ 大坑 2:不是线程安全(不可重入)

裸机 STM32 随便用,RTOS 不要用!

❌ 大坑 3:多个连续分隔符会被当成一个

"LED,,ON" → 切成 LED 和 ON

七、你工程里的正确用法(命令解析)

char buf[] = "LED,ON,1";
char *object = strtok(buf, ",");    // "LED"
char *cmd    = strtok(NULL, ",");   // "ON"
char *param  = strtok(NULL, ",");   // "1"

然后你就可以判断:

  • if(object 是 LED)
  • if(cmd 是 ON)
  • 执行开灯

八、总结(适合发CSDN)

strtok 是什么?

字符串切割神器,把长串按符号切成小段。

怎么用?

  1. 第一次:strtok(字符串, 分隔符)
  2. 后续:strtok(NULL, 分隔符)
  3. 得到片段,处理逻辑

最重要坑

会修改原始字符串,必须用 char[],不能用常量字符串!

到此这篇关于C 语言 strtok 函数超详细讲解(推荐)的文章就介绍到这了,更多相关C 语言 strtok 函数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 使用C++模拟实现2024春晚刘谦魔术

    使用C++模拟实现2024春晚刘谦魔术

    刘谦在2024年春晚上的撕牌魔术的数学原理非常简单,所以这篇文章主要为大家详细介绍了如何使用C++模拟实现这一魔术效果,感兴趣的可以了解下
    2024-02-02
  • C++实现邻接表顶点的删除

    C++实现邻接表顶点的删除

    这篇文章主要为大家详细介绍了C++实现邻接表顶点的删除,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04
  • 利用OpenCV实现局部动态阈值分割

    利用OpenCV实现局部动态阈值分割

    这篇文章主要为大家详细介绍了利用OpenCV实现局部动态阈值分割,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • opencv3/C++图像边缘提取方式

    opencv3/C++图像边缘提取方式

    今天小编就为大家分享一篇opencv3/C++图像边缘提取方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • C++11 并发指南之Lock 详解

    C++11 并发指南之Lock 详解

    这篇文章主要介绍了C++11 并发指南之Lock 详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • C++中关键字 override 的简析

    C++中关键字 override 的简析

    这篇小文来聊聊 C++中的关键字 override,它的含义其实两句话就说完了,但为了叙述的完整性,让我们从虚函数说起。感兴趣的小伙伴可以跟着小编一起学习下面文章内容
    2021-09-09
  • C语言求逆矩阵案例详解

    C语言求逆矩阵案例详解

    这篇文章主要介绍了C语言求逆矩阵案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • C++ namespace相关语法实例分析

    C++ namespace相关语法实例分析

    这篇文章主要介绍了C++ namespace相关语法实例分析,对C++初学者有很好的参考借鉴价值,需要的朋友可以参考下
    2014-08-08
  • C语言实现简单的三子棋游戏

    C语言实现简单的三子棋游戏

    这篇文章主要为大家详细介绍了C语言实现三子棋游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-09-09
  • C++段错误(Segmentation fault)快速定位的解决方法

    C++段错误(Segmentation fault)快速定位的解决方法

    写过C++的朋友都知道,有时候程序编译通过,并不能代表程序就是对的,在linux下做开发时,经常会遇到跑崩溃的情况,但是在终端只会报Segmentation fault,如果工程代码量少,你还能重新debug一下慢慢找,本文给大家介绍了C++段错误的快速定位,需要的朋友可以参考下
    2024-07-07

最新评论