C++ 将冒号(:)添加到C++;

C++ 将冒号(:)添加到C++;,c++,arrays,char,arduino,const-char,C++,Arrays,Char,Arduino,Const Char,我正在编写一个Arduino库,用于Arduino和计算机之间使用串行馈送进行简单的数据传输。我已经创建了库等。但是,我在获取字符数组和向其中添加冒号(“:”)时遇到了问题。就是 //Sends data via println() void simpleTransfer::sendData(char *name, char *data){ char *str = name + ": " + data + ","; _serial->println(str); //Send

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

//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+”无效


原因是什么?

简短回答:使用
std::string
创建串联字符串

 std::string s = ((std::string(name) + ": ") + data) + ",";
_serial->println( s.c_str() );
详细回答:当连接C样式字符串时,需要一个足够大的目标缓冲区来保存结果。如果您知道结果可以达到的最大大小,那么可以声明该大小的本地数组,并使用
sprintf
,正如其他答案所解释的那样


或者,如果您事先不知道大小,您可以结合使用
strlen
new[]
动态分配大小缓冲区,进行打印,然后
删除[]
缓冲区。但不要这样做!使用字符串类,或者像Drew Dorman在下面的评论中提到的那样,使用特定于Arduino的
string
类。

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

 std::string s = ((std::string(name) + ": ") + data) + ",";
_serial->println( s.c_str() );
详细回答:当连接C样式字符串时,需要一个足够大的目标缓冲区来保存结果。如果您知道结果可以达到的最大大小,那么可以声明该大小的本地数组,并使用
sprintf
,正如其他答案所解释的那样

或者,如果您事先不知道大小,您可以结合使用
strlen
new[]
动态分配大小缓冲区,进行打印,然后
删除[]
缓冲区。但不要这样做!使用字符串类,或者像Drew Dorman在下面的评论中提到的那样,使用特定于Arduino的
string
类。

您可以使用:

或:


或者只使用C++。

您可以使用:

或:



或者只使用C++。

您正在寻找字符串连接。添加两个指针并不能做到这一点。感谢所有帮助您寻找字符串连接。添加两个指针不起作用。谢谢你的帮助。。。从我可以看出,ARDUNO的C++实现没有头<代码> >代码>,但它提供了一个类型-<代码>字符串 >,它将支持您编写的语法。如果我错了,请纠正我,任何人。:)@德鲁多曼:哦,我不知道阿杜伊诺有这个!你真的不想在ARDUNO上使用标准C++库:它是一个低资源平台。因此,它有自己的字符串实现。。。。从我可以看出,ARDUNO的C++实现没有头<代码> >代码>,但它提供了一个类型-<代码>字符串 >,它将支持您编写的语法。如果我错了,请纠正我,任何人。:)@德鲁多曼:哦,我不知道阿杜伊诺有这个!你真的不想在ARDUNO上使用标准C++库:它是一个低资源平台。由于这个原因,它有自己的字符串实现。与上面相同的注释:
std::string
不适用于Arduino。
sprintf
方法更好,但需要引入某些库,这些库会显著增加代码大小,在上面的ArduinoName注释中也不可取:
std::string
不适用于Arduino。
sprintf
方法更好,但需要引入某些库,这会显著增加代码大小,在Arduino上也不可取
char str[64];
strcpy(str, name);
strcat(str, ":");
strcat(str, data);
strcat(str, ",");