有适用于STM32的strtok 分割字符串函数吗?

2019-12-09 13:37发布

有适用于STM32的strtok 分割字符串函数吗?  自己写感觉是在重复造轮子。想用库,不知道是否很费内存?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
菜包
1楼-- · 2019-12-09 18:29
这个函数不复杂啊,你不想用库也可以照着源码弄个函数用

  1. /* Copyright (C) 1994 DJ Delorie, see COPYING.DJ for details */
  2. #include <string.h>

  3. char* strtok(char *s, const char *delim)
  4. {
  5.   const char *spanp;
  6.   int c, sc;
  7.   char *tok;
  8.   static char *last;

  9.   if (s == NULL && (s = last) == NULL)
  10.     return (NULL);
  11.   /*
  12.    * Skip (span) leading delimiters (s += strspn(s, delim), sort of).
  13.    * 跳过字符串首部的分隔符
  14.    */
  15. cont:
  16.   c = *s++;
  17.   for (spanp = delim; (sc = *spanp++) != 0;) {
  18.     if (c == sc)
  19.       goto cont;
  20.   }
  21.   
  22.   /*
  23.    *分割符后面没有字符串了
  24.    */
  25.   if (c == 0) {                 /* no non-delimiter characters */
  26.     last = NULL;
  27.     return (NULL);
  28.   }
  29.   tok = s - 1;    /*分割符后面还有字符串,将tok指向字符串首部(不包括分隔符)*/

  30.   /*
  31.    * Scan token (scan for delimiters: s += strcspn(s, delim), sort of).
  32.    * Note that delim must have one NUL; we stop if we see that, too.
  33.    * 循环字符串中的字符,直到找到分隔符或者结束符,并替换成结束符
  34.    */
  35.   for (;;) {
  36.     c = *s++;
  37.     spanp = delim;
  38.     /*
  39.      *判断字符串中的某字符是否是分割符中的字符
  40.      *如果是,将分隔符替换成结束符并返回tok;
  41.      *如果不是,继续判断下一个字符
  42.      */
  43.     do {
  44.       if ((sc = *spanp++) == c) {
  45.         if (c == 0)
  46.           s = NULL;
  47.         else
  48.           s[-1] = 0;
  49.         last = s;
  50.         return (tok);
  51.       }
  52.     } while (sc != 0);
  53.   }
  54.   /* NOTREACHED */
  55. }
复制代码
fbwcpu
2楼-- · 2019-12-09 23:18
菜包 发表于 2019-11-25 16:49
这个函数不复杂啊,你不想用库也可以照着源码弄个函数用

在STM32F10X上可以用?   比较费内存吧?
tomzbj
3楼-- · 2019-12-10 04:40
 精彩回答 2  元偷偷看……
菜包
4楼-- · 2019-12-10 04:52
fbwcpu 发表于 2019-11-25 18:06
在STM32F10X上可以用?   比较费内存吧?

源码都贴出来了,就那么几个变量,你觉得会用多少内存

一周热门 更多>