string(文字の配列)

名称

string(文字の配列)

説明

文字列を表すには、バージョン0019以降でのString型を使う方法とナル文字で終わるchar型の配列を使う方法の2種類がある。このページでは、後者を説明する。メモリは消費するが多機能の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のように初期化しないで、char型の配列を宣言する方法。
  • Str2のように、1文字分多くchar型の配列を宣言して、コンパイラに終端ナル文字を追加させる方法。
  • Str3のように、終端ナル文字まで明示的に宣言する方法。
  • Str4のように、2重引用符で囲った文字列を指定し、コンパイラに文字列と終端ナル文字とが入るだけの領域を確保させる方法。
  • Str5のように、文字列と文字列の長さを明示的に示して初期化する方法。
  • Str6のように、大きい長さを指定して、より大きな文字列をあとから格納するために、残りを確保しておく方法。

終端ナル文字

一般に、文字列はナル文字(ASCIIコード0)で終端している。これにより、Serial.print()のような関数が、文字列の終わりがどこなのかがわかるようになる。そうでなければ、実際には文字列ではない部分のメモリまで読み取り続けてしまう。

終端ナル文字があるため、文字列変数には、本来保持したい文字数よりも1文字分多い長さが必要である。“arduino"は7文字なのに、前述のStr2とStr5では、8文字分確保しているのはこのためである。すなわち、最後にナル文字が埋め込まれる。Str4では、終端ナル文字のために自動的に8バイト確保される。Str3では、明示的にナル文字(’\0’)を文字列に含めている。

終端ナル文字を持たないchar型配列を作ることもできる。例えば、Str2で、配列の長さを7にすると可能である。こうしてしまうと、文字列を使うほとんどの関数は破綻するので、このようなことはしないほうがいい。何か変なことが起こったら、このことが原因かもしれない。

一重引用符?二重引用符?

文字列はいつも二重引用符で囲んで定義され(“Abc”)、文字はいつも一重引用符で囲んで定義される(‘A’)。

長い文字列の連結

長い文字列は、連結して作ることもできる。

1
2
3
char myString[] = "This is the first line"
" this is the second line"
" etcetera";

文字列の配列

LCDディスプレイを用いたプロジェクトなどで、多くのテキストを操作するときは、文字列の配列を使うと便利である。文字列自身が配列なので、文字列の配列は2次元配列になる。

以下のコードでは、charの後の*は、charへのポインタであることを示し、myStringsの後の[]は、charへのポインタの配列であることを示す。全ての配列の要素がcharへのポインタである。C++言語の初心者にとって、ポインタは難解なものである。しかし、効果的にポインタを使うためにはポインタの詳細についてまで知っている必要はない。

使用例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
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);
  }
}

参照

言語 PROGMEM

オリジナルのページ

https://www.arduino.cc/reference/en/language/variables/data-types/string/

Last Revision: 2019/07/30

最終更新日

January 4, 2024

inserted by FC2 system