我正在编写一个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 +'的无效操作数
是什么原因?
答案 0 :(得分: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
类。
答案 1 :(得分:2)
您可以使用sprintf:
char str[64]; // Or whatever length you need to fit the resulting string
sprintf(str, "%s:%s,", name, data);
char str[64];
strcpy(str, name);
strcat(str, ":");
strcat(str, data);
strcat(str, ",");
或者只使用C ++的std::string。