一、strtok 是啥一句话strtok 字符串切割函数作用把一长串字符串按照你指定的符号切成一段一段的小字符串。比如LED,ON,1用,切割 → 切成LED ON 1二、函数原型char*strtok(char*str,constchar*delim);str要切割的原始字符串delim分隔符比如,:\r\n返回值切出来的第一段字符串三、最简单例子一看就会#includestring.h#includestdio.hintmain(){charbuf[]LED,ON,1;// 要切割的字符串char*token;// 存放切出来的片段// 第一次调用传入字符串 分隔符tokenstrtok(buf,,);printf(第1段%s\n,token);// LED// 第二次调用传入 NULL 分隔符tokenstrtok(NULL,,);printf(第2段%s\n,token);// ON// 第三次调用tokenstrtok(NULL,,);printf(第3段%s\n,token);// 1}输出第1段LED 第2段ON 第3段1四、strtok 最关键规则必须记第一次调用必须传入要切割的字符串后面调用必须传NULL传 NULL 继续切上次剩下的字符串切完了 → 返回NULL五、你在 STM32 里用来干嘛用来解析串口指令比如串口收到LED,ON,1 LED,OFF,2 MOTOR,SPEED,500用 strtok 切割后第一段对象LED/MOTOR第二段命令ON/OFF/SPEED第三段参数1/2/500这就是你那个命令解析框架的核心六、strtok 超级大坑必看发CSDN爆款❌ 大坑 1strtok会破坏原始字符串它会把分隔符变成 \0所以不能传常量字符串strtok(LED,ON,1,,);// ❌ 崩溃必须用数组charbuf[]LED,ON,1;// ✅ 正确strtok(buf,,);❌ 大坑 2不是线程安全不可重入裸机 STM32 随便用RTOS 不要用❌ 大坑 3多个连续分隔符会被当成一个LED,,ON → 切成 LED 和 ON七、你工程里的正确用法命令解析charbuf[]LED,ON,1;char*objectstrtok(buf,,);// LEDchar*cmdstrtok(NULL,,);// ONchar*paramstrtok(NULL,,);// 1然后你就可以判断if(object 是 LED)if(cmd 是 ON)执行开灯八、总结适合发CSDNstrtok 是什么字符串切割神器把长串按符号切成小段。怎么用第一次strtok(字符串, 分隔符)后续strtok(NULL, 分隔符)得到片段处理逻辑最重要坑会修改原始字符串必须用 char[]不能用常量字符串
[特殊字符] C 语言 strtok 函数超详细讲解
一、strtok 是啥一句话strtok 字符串切割函数作用把一长串字符串按照你指定的符号切成一段一段的小字符串。比如LED,ON,1用,切割 → 切成LED ON 1二、函数原型char*strtok(char*str,constchar*delim);str要切割的原始字符串delim分隔符比如,:\r\n返回值切出来的第一段字符串三、最简单例子一看就会#includestring.h#includestdio.hintmain(){charbuf[]LED,ON,1;// 要切割的字符串char*token;// 存放切出来的片段// 第一次调用传入字符串 分隔符tokenstrtok(buf,,);printf(第1段%s\n,token);// LED// 第二次调用传入 NULL 分隔符tokenstrtok(NULL,,);printf(第2段%s\n,token);// ON// 第三次调用tokenstrtok(NULL,,);printf(第3段%s\n,token);// 1}输出第1段LED 第2段ON 第3段1四、strtok 最关键规则必须记第一次调用必须传入要切割的字符串后面调用必须传NULL传 NULL 继续切上次剩下的字符串切完了 → 返回NULL五、你在 STM32 里用来干嘛用来解析串口指令比如串口收到LED,ON,1 LED,OFF,2 MOTOR,SPEED,500用 strtok 切割后第一段对象LED/MOTOR第二段命令ON/OFF/SPEED第三段参数1/2/500这就是你那个命令解析框架的核心六、strtok 超级大坑必看发CSDN爆款❌ 大坑 1strtok会破坏原始字符串它会把分隔符变成 \0所以不能传常量字符串strtok(LED,ON,1,,);// ❌ 崩溃必须用数组charbuf[]LED,ON,1;// ✅ 正确strtok(buf,,);❌ 大坑 2不是线程安全不可重入裸机 STM32 随便用RTOS 不要用❌ 大坑 3多个连续分隔符会被当成一个LED,,ON → 切成 LED 和 ON七、你工程里的正确用法命令解析charbuf[]LED,ON,1;char*objectstrtok(buf,,);// LEDchar*cmdstrtok(NULL,,);// ONchar*paramstrtok(NULL,,);// 1然后你就可以判断if(object 是 LED)if(cmd 是 ON)执行开灯八、总结适合发CSDNstrtok 是什么字符串切割神器把长串按符号切成小段。怎么用第一次strtok(字符串, 分隔符)后续strtok(NULL, 分隔符)得到片段处理逻辑最重要坑会修改原始字符串必须用 char[]不能用常量字符串