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

作者:袖梨 2026-06-11

一、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爆款

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

它会把分隔符变成

所以 不能传常量字符串

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

相关文章

精彩推荐