List 使用Arduino将输入字符串拆分为列表

List 使用Arduino将输入字符串拆分为列表,list,split,arduino,read-eval-print-loop,arduino-uno,List,Split,Arduino,Read Eval Print Loop,Arduino Uno,我正在为Arduino编写一个非常基本的REPL。要获取参数,我需要将字符串拆分为多个部分,使用空格分隔。我不知道如何存储结果。例如,pinmode 1 input将产生一个列表:“pinmode”,1,“input”。1必须是int。我已经查看了其他堆栈溢出答案,但它们需要char输入 不要使用字符串。这就是为什么所有其他答案都使用char,通常称为C字符串(小写“s”)字符串使用“动态内存”(即堆),这在这个小型微控制器上是不好的。它还为您的程序大小增加了1.6k 最简单的方法是将收到的每个

我正在为Arduino编写一个非常基本的REPL。要获取参数,我需要将
字符串
拆分为多个部分,使用空格分隔。我不知道如何存储结果。例如,
pinmode 1 input
将产生一个列表:
“pinmode”,1,“input”
。1必须是
int
。我已经查看了其他堆栈溢出答案,但它们需要
char
输入

不要使用
字符串
。这就是为什么所有其他答案都使用
char
,通常称为C字符串(小写“s”)<代码>字符串
使用“动态内存”(即堆),这在这个小型微控制器上是不好的。它还为您的程序大小增加了1.6k

最简单的方法是将收到的每个字符保存到
char
数组中,直到得到换行符“\n”。确保在末尾添加NUL字符,并确保数组大小适当

然后使用C字符串库处理数组:strcmp、strtoul、strtok、isdigit等。学习这些例程将获得真正的回报,因为它可以使您的程序小巧快速。C字符串也很容易打印出来


同样,远离
字符串
。这对初学者很有诱惑力,因为它很容易理解。然而,它有许多微妙、复杂和不可预测的方式使您的嵌入式程序失败。这不是一台有很多RAM和硬盘上有交换文件的电脑。

你能给我举个例子吗?我想将serial中的数据存储在一个名为
content
的变量中,并能够将输入中的第一个单词与短语进行比较。如果短语匹配,我想做点什么。嗯,看看其他需要字符输入的堆栈溢出答案?你试过什么?编辑上面的文章并插入代码,确保使用^K设置代码部分的格式。对于攻击的总体计划,我可以建议:(1)从一个简单的echo程序开始。(2) 将每个字符保存在一个数组中,直到得到换行符并将其全部打印出来。(3) 使用strtok分割阵列并打印每个片段。(4) 使用strcmp和strtoul解析每个片段。