C++ Arduino子串不';行不通
我有一个静态方法,可以搜索(并返回)字符串msg中标记之间的值 这是代码函数:C++ Arduino子串不';行不通,c++,arduino,substring,C++,Arduino,Substring,我有一个静态方法,可以搜索(并返回)字符串msg中标记之间的值 这是代码函数: static String genericCutterMessage(String TAG, String msg){ Serial.print("a-----"); Serial.println(msg); Serial.print("b-----"); Serial.println(TAG); if(msg.indexOf(TAG) >= 0){ Se
static String genericCutterMessage(String TAG, String msg){
Serial.print("a-----");
Serial.println(msg);
Serial.print("b-----");
Serial.println(TAG);
if(msg.indexOf(TAG) >= 0){
Serial.print("msg ");
Serial.println(msg);
int startTx = msg.indexOf(TAG)+3;
int endTx = msg.indexOf(TAG,startTx)-2;
Serial.print("startTx ");
Serial.println(startTx);
Serial.print("endTx ");
Serial.println(endTx);
String newMsg = msg.substring(startTx,endTx);
Serial.print("d-----");
Serial.println(newMsg);
Serial.println("END");
Serial.println(newMsg.length());
return newMsg;
} else {
Serial.println("d-----TAG NOT FOUND");
return "";
}
}
这就是输出
a-----[HS][TS]5132[/TS][TO]5000[/TO][/HS]
b-----HS
msg [HS][TS]5132[/TS][TO]5000[/TO][/HS]
startTx 4
endTx 30
d-----
END
0
fake -_-'....go on! <-- print out of genericCutterMessage
但我不知道为什么我会收到一个空字符串
为了了解子字符串是如何工作的,我只是在Arduino官方网站上学习了这个教程
我不是C++和ARDUNO的专家,但这看起来像是一个泛滥或缓冲问题,不是吗?
有什么想法吗?您的代码是正确的,不应该发生这种情况。这迫使你考虑可能会失败的意想不到的方式。我能想到的只有一个候选人的不幸,你的Arduino内存不足。它只有很少的内存,例如Uno只有2千字节。不需要太多的细嚼细嚼就能把它填满 这不是一个顺利的报告。我所能做的就是给你指出相关的问题。引述: 如果SRAM用完,您的程序可能会以意外方式失败;它将显示为已成功上载,但未运行,或运行异常。要检查是否发生这种情况,可以尝试注释或缩短草图中的字符串或其他数据结构(无需更改代码)。如果它随后成功运行,则可能是SRAM用完了。要解决此问题,您可以做以下几件事:
- 如果您的草图与(台式机/笔记本电脑)计算机上运行的程序对话,您可以尝试将数据或计算转移到计算机上,以减少Arduino上的负载
- 如果有查找表或其他大型数组,请使用存储所需值所需的最小数据类型;例如,一个int占用两个字节,而一个字节只使用一个字节(但可以存储较小的值范围)
- 如果在草图运行时不需要修改字符串或数据,可以将其存储在闪存(程序)内存中,而不是存储在SRAM中;为此,请使用PROGMEM关键字李>
这对你的具体情况没有多大帮助,你必须为候选人看一下课程的其余部分。或者升级您的硬件,StackExchange为Arduino爱好者提供了一个平台,当然是获得建议的最佳场所。这打印的是什么:
Serial.println(newMsg.length())代码>?请添加:serial.println(“结束”)
,并再次检查单词END
是否出现在打印输出的末尾。是否在Serial.println(newMsg)之后添加Serial.flush()
代码>更改任何内容?正如您所建议的,我添加了serial.println(“END”);和Serial.println(newMsg.length());在子串之后。我把答案放在主帖子中(简短长度=0,结束时在d-----后放正确)是的!!!!你的建议很有用!。。。我在可能的地方使用指针优化了我的代码,现在一切都很好!!!。。。我是一名java开发人员,指针(一般来说是c++)不是我最好的朋友;)!你得了50分!
[TS]5132[/TS][TO]5000[/TO]