説明
文字列を表現するには、2つの方法があります。バージョン0019からコアに組み込まれたStringデータ型を使用する方法と、char型の配列から文字列を作成し、それをヌル終端にする方法です。このページでは、後者の方法について説明します。より多くのメモリを犠牲にしてより多くの機能を提供するStringオブジェクトの詳細については、Stringオブジェクトのページを参照してください。
構文
以下はすべて文字列の有効な宣言です。
char Str1[15];
char Str2[8] = {‘a’, ‘r’, ‘d’, ‘u’, ‘i’, ‘n’, ‘o’};
char Str3[8] = {‘a’, ‘r’, ‘d’, ‘u’, ‘i’, ‘n’, ‘o’, ‘\0’};
char Str4[] = “arduino”;
char Str5[8] = “arduino”;
char Str6[15] = “arduino”;
文字列宣言の可能性
Str1のように初期化せずに,文字列の配列を宣言する
Str2のように,文字の配列を宣言し,コンパイラが必要なnull文字を追加する(余分な1文字を含む)。
明示的にヌル文字を追加する、Str3
文字列定数を引用符で囲んで初期化します。コンパイラーは文字列定数と終端のヌル文字 Str4 に合わせて配列のサイズを調整します。
明示的にサイズと文字列定数を指定して配列を初期化する、Str5
より大きな文字列のために余分なスペースを残して配列を初期化します。
ヌル文字の終端
一般に、文字列はヌル文字(ASCIIコード0)で終端します。これにより、Serial.print()などの関数は、文字列の終わりがどこにあるかを知ることができます。そうしないと、実際には文字列の一部ではない、後続のメモリのバイトを読み続けることになります。
つまり、文字列には、含ませたいテキストよりも1文字分多いスペースが必要なのです。これが、”arduino “が7文字しかないにもかかわらず、Str2とStr5が8文字でなければならない理由です – 最後の位置は自動的にヌル文字で埋められます。Str4は自動的に8文字になり、1文字は余分なnullになります。Str3では、ヌル文字(「0」と書かれています)を自分で明示的に入れています。
なお、最後のヌル文字がない文字列を作ることも可能です(例えば、Str2の長さを8ではなく7と指定した場合)。これは文字列を使用するほとんどの関数を壊してしまうので、意図的に行うべきではありません。しかし、何かおかしな動作(文字列に含まれていない文字を操作する)に気づいたら、これが問題かもしれません。
シングルクォートかダブルクォートか?
文字列は常にダブルクォート(”Abc”)の中で定義され、文字は常にシングルクォート(’A’)の中で定義されます。
長い文字列の折り返し
長い文字列は、次のように折り返すことができます。
char myString[] = “This is the first line”
” これは2行目です”
「etcetera”;
文字列の配列
液晶ディスプレイを使ったプロジェクトなど、大量のテキストを扱う場合には、文字列の配列を設定するのが便利です。文字列自体が配列であるため、これは2次元配列の例となります。
以下のコードでは、データ型のchar「char*」の後にあるアスタリスクは、これが「ポインタ」の配列であることを示しています。すべての配列名は実際にはポインターであるため、配列の配列を作るにはこれが必要です。ポインターはC++の中でも初心者が理解するには難解な部分ですが、ここではポインターを効果的に使うために、ポインターを詳しく理解する必要はありません。
プログラム例
char *myStrings[] = {"This is string 1", "This is string 2", "This is string 3", "This is string 4", "This is string 5", "This is string 6" }; void setup() { Serial.begin(9600); } void loop() { for (int i = 0; i < 6; i++) { Serial.println(myStrings[i]); delay(500); } }