0

我正在编写一个 Arduino 库,用于使用串行馈送在 Arduino 和计算机之间进行简单的数据传输。我已经创建了库等。但是,我在获取 char 数组并向其添加冒号 (':') 时遇到问题。那是,

//Sends data via println()
void simpleTransfer::sendData(char *name, char *data){
    char *str = name + ": " + data + ",";
    _serial->println(str); //Sends in form 'name: data,'
}

这应该采用我要发送的变量的名称,添加一个冒号和一个空格,以及我要发送的数据,最后是一个逗号。但是,我反而收到错误消息:

'char*' 和 'const char [3]' 类型的无效操作数到二进制 'operator+'

是什么原因?

4

2 回答 2

3

简短回答:用于std::string创建连接字符串。

 std::string s = ((std::string(name) + ": ") + data) + ",";
_serial->println( s.c_str() );

长答案:连接 C 风格的字符串时,您需要一个足够大的目标缓冲区来保存结果。如果您知道结果可以达到的最大大小,则可以声明该大小的本地数组,并sprintf按照其他答案的说明使用。

或者,如果您事先不知道大小,您可以使用strlen和的组合new[]来分配动态大小的缓冲区,先进行打印,然后再delete[]进行缓冲区。但不要这样做!改用字符串类std::string,或者正如 Drew Dormann 在下面的评论中提到的,一个 Arduino 特定String类。

于 2013-04-10T16:46:12.040 回答
2

您可以使用sprintf

char str[64];  // Or whatever length you need to fit the resulting string
sprintf(str, "%s:%s,", name, data);

strcpy/strcat

char str[64];
strcpy(str, name);
strcat(str, ":");
strcat(str, data);
strcat(str, ",");


或者只使用 C++ 的std::string

于 2013-04-10T16:48:01.437 回答