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、他の回答で説明されているように使用できます。

または、事前にサイズがわからない場合は、 と の組み合わせを使用してstrlennew[]動的にサイズのバッファーを割り当て、印刷を実行してからバッファーを実行できます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 に答える