事象
Arduino(cpp)で文字列を連結したいが、加算演算子(+)による結合を行うと以下エラー。
exit status 1
invalid operands of types 'const char [5]' and 'const char*' to binary 'operator+
原因
const char *
はC言語の文字列型であり、”文字列”という概念を配列やポインタで表現している為結合を行うことが出来ない。
解決策
①str::stringを使う
C++の文字列型である std::string
を使用する。
具体的には以下。
std::string hoge = "俺は人間をやめるぞ!";
char fuga[] = {'ジョジョーー', 'ッ!!'};
hoge.append(fuga, 2);
puts(hoge.c_str());//俺は人間をやめるぞ!ジョジョーーッ!!
②append関数で追加
std::string型でない場合、append関数を使うだけで可能。
string hoge = "俺は人間をやめるぞ!";
string fuga = hoge.append("ジョジョーーッ!!");
cout << fuga << endl;//俺は人間をやめるぞ!ジョジョーーッ!!
③snprintfに流し込む
上記のやり方が適さない場合、snprintfを使えば大体解決できる。
const char *hoge = "俺は人間をやめるぞ!", *fuga = "ジョジョーーッ!!";
//結合先の配列
char l[6];
snprintf(l, 3, "%s%s", hoge, fuga);
printf("%s", l);//俺は人間をやめるぞ!ジョジョーーッ!!