一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

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

时间:2026-06-11 08:31:54 编辑:袖梨 来源:一聚教程网

一、strtok 是啥?(一句话)

strtok = 字符串切割函数

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

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

比如:

"LED,ON,1"

, 切割 → 切成

"LED"   "ON"   "1"

二、函数原型

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

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

#include <string.h>
#include <stdio.h>
int main()
{
    char buf[] = "LED,ON,1";  // 要切割的字符串
    char *token;              // 存放切出来的片段
    // 第一次调用:传入字符串 + 分隔符
    token = strtok(buf, ",");
    printf("第1段:%sn", token);  // LED
    // 第二次调用:传入 NULL + 分隔符
    token = strtok(NULL, ",");
    printf("第2段:%sn", token);  // ON
    // 第三次调用
    token = strtok(NULL, ",");
    printf("第3段:%sn", 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会破坏原始字符串

它会把分隔符变成

所以 不能传常量字符串

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[],不能用常量字符串!

热门栏目