Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Arduino子串不';行不通_C++_Arduino_Substring - Fatal编程技术网

C++ Arduino子串不';行不通

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

我有一个静态方法,可以搜索(并返回)字符串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){
        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]