2017-04-15 6 views
1

コードに問題があります。 大量のトピックを読んだことがありますが、ほとんどはカスタムライブラリに関連しています。arduino、error:タイプ 'char [14]'と 'char [5]'のオペランドが無効で、バイナリ 'operator +'

マイコードはカスタムライブラリとは関係ありません。 私は間違って何をしているのか知っている人がいるといいと思う。 2つの文字列を新しい変数に "マージ"しようとしています。

エラー:このコードに関連する

sketch_SS01:13: error: invalid operands of types 'char [14]' and 'char [5]' to binary 'operator+' 
char apiPath = apiPage + pid; 
        ^
exit status 1 
invalid operands of types 'char [14]' and 'char [5]' to binary 'operator+' 

エラー:

// api details 
char apiPage[] = "/api.php?pid="; 
char pid[] = "8855"; 
char apiPath = apiPage + pid; 

答えて

2

コンパイラがそれを言う:あなたはCの文字列を連結するoperator+を使用することはできません(すなわちchar[])。ライブラリ関数strcatを使用するか、より安全な兄弟strncatを使用する必要があります。文字列dest

文字列xの連結はstrcat (dest,x);ですが、マニュアルを参照してchar配列を扱う際にバッファオーバーフローの危険性に特別な注意を払ってください。あなたが

// api details 
char apiPage[] = "/api.php?pid="; 
char pid[] = "8855"; 
char apiPath[100] = ""; // make sure it' long enough and initialized to empty string 
strcat(apiPath, apiPage); 
strcat(apiPath, pid); 

を行うことができます書かれているよう

はあなたの例を記述するために、またはあなたが strcpystrncpyを使用して宛先文字列内の正しい場所に使用して文字列をコピーすることができます。

追加:https://www.arduino.cc/en/Reference/StringObject

を参照してください。

A(おそらくより良い/単純/安全な)選択肢は(など、追加、コンストラクタのような追加)予想されるすべての文字列の機能を持っているStringクラスを使用することです

+0

ありがとうございました。しかし、なぜ彼らはグローバル変数として働かないのですか?これはsetup()またはloop()関数/スコープの中に入れた場合にのみ機能します。 –

+0

何がうまくいかないのですか? BTW私はちょうど、 '正しい '文字列クラスへの参照を' char [] 'の代わりに使って答えを更新しました – drRobertz

+1

私の「何がうまくいかないの?何らかの理由でグローバル変数が読み取り専用メモリに終わらない限り、グローバル変数としても動作すると期待しています。 (しかし、私はそれをarduinoでやっていません)。どのように非動作のグローバル変数を宣言しますか?そして何が問題なの?コンパイラエラーまたは間違った動作? – drRobertz

関連する問題