在C ++中向冒号的char添加冒号(:)

时间:2013-04-10 16:42:30

标签: c++ arrays char arduino const-char

我正在编写一个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 +'的无效操作数

是什么原因?

2 个答案:

答案 0 :(得分:3)

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

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

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

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

答案 1 :(得分: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