[特殊字符] C 语言 strtok 函数超详细讲解
2026/6/10 12:39:17 网站建设 项目流程

一、strtok 是啥?(一句话)

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

比如:

"LED,ON,1"

,切割 → 切成

"LED" "ON" "1"

二、函数原型

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

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

#include<string.h>#include<stdio.h>intmain(){charbuf[]="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",",");// ❌ 崩溃!

必须用数组

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

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

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

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

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

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

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


需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询