文字列
Mapleのテキスト文字列は、char型のヌルで終了する配列で表現できます。 利用例
以下はすべて、文字列の有効な宣言です。
code:sample1.ino
char str26 = {'m', 'a', 'p', 'l', 'e'}; char str36 = {'m', 'a', 'p', 'l', 'e', '\0'}; char str4 = "maple";
ご覧のとおり、文字列の宣言と初期化にはいくつかの方法があります。
str1と同様に、初期化せずにcharの配列を宣言します。
char(1つの余分なcharを持つ)の配列を宣言すると、コンパイラはstr2のように必要なヌル文字を追加します。
str3のように、ヌル文字( '\ 0')を明示的に追加します。
文字列定数を引用符( "...")で初期化します。 コンパイラは文字列定数と終了ヌル文字(str4)に合うように配列のサイズを設定します。
明示的なサイズと文字列定数(str5)で配列を初期化します。
大きな文字列(str6)のための余分なスペースを残して、配列を初期化します。
ヌル終了
通常、文字列はヌル文字(ASCIIコード0)で終了します。 これにより、関数(SerialUSB.print()など)は、文字列の終わりがどこにあるかを知ることができます。 それ以外の場合は、実際に文字列の一部ではないメモリの後続のバイトの読み取りを継続します。
これは、文字列にはテキストよりも1文字多いスペースが必要であることを意味します。 そのため、 "maple"は5文字であっても、str2とstr5は6文字にする必要があります。最後の位置は自動的にヌル文字で埋められます。 str4のサイズは自動的に6文字になります.1つは余分なヌル文字です。 str3の場合は、ヌル文字( '\ 0'と書かれています)を明示的に含めました。
(例えば、str2の長さを6ではなく5として指定した場合など)最後のヌル文字のない文字列を使用することができます。 これは、文字列を使用するほとんどの関数を破壊するので、意図的に行うべきではありません。 しかし、奇妙なことに気付いた場合(文字列にない文字を操作する)、これが問題になる可能性があります。
一重引用符または二重引用符?
文字列は常に二重引用符("Abc")で定義され、文字は常に一重引用符( 'A')で定義されます。
長い文字列のラップ
このように長い文字列をラップすることができます:
code:sample2.ino
char myString[] = "This is the first line"
" this is the second line"
" etcetera";
文字列の配列
大量のテキスト(LCDディスプレイを備えたプロジェクトなど)で作業して文字列の配列を設定すると便利なことがよくあります。 文字列自体は配列なので、実際には2次元配列の例です。
以下のコードでは文字列データを定義している char *は、これが "ポインタ"の配列であることを示しています。 すべての配列名は実際にはポインタなので、これは配列の配列を作るために必要です。 ポインタは、初心者のためにCのより難解な部分の1つですが、ここで効果的に使用するためにポインタを詳細に理解する必要はありません。
code:sample3.ino
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() {
SerialUSB.begin();
}
void loop() {
for (int i = 0; i < 6; i++) {
SerialUSB.println(myStringsi); delay(500);
}
}
関連項目
このドキュメントはleafLabs, LLC.が執筆し、たま吉が翻訳・一部加筆修正したものです。