前項では、文字変数の取り扱いについて説明しました。
単純に考えれば、この文字変数をたくさん集めると、文字列になるはずです。
同じ型の変数をたくさん集める・・・、どこかで聞いたことがありませんか?
そうです。文字変数の配列を作れば、すなわち文字列になるのです。
文字変数の配列をC言語では文字列変数として使うことが出来ます。
しかし、ここで1つの疑問が生じます。
それは、文字列の文字数をどのように記憶しておくかということです。
文字数がわからなくては、文字列を取り出す時に困ります。
C言語では、文字列の最後に特別な値を記憶しておくことで文字数を判定します。
この様な文字を特にEOSと呼ぶことがあります。
C言語の場合、'\0'がEOSとして扱われます。'\0'は、数値としては0にあたりります。
文字列を作ることが出来れば、それを表示させることは簡単です。
[ EOS ]
文字列の終わりを表す記号。終端文字とも呼ばれる。
なお、End of String の頭文字をとっている。
ここまでわかれば、文字列を扱うことが出来ます。
次のプログラムは、文字変数の配列に文字列を記憶して表示する例です。
このプログラムの実行結果は次のようになります。#include <stdio.h> int main(void) { char str[6] = {'M','A','R','I','O','\0'}; printf("%s\n",str); return 0; }
このプログラムを見るとわかりますが、文字列の最後にはEOSが入るため、
MARIO
もしも文字列にEOSがなかった場合は、配列の先まで文字列として扱われるので、
偶然にどこかで0(EOS)が見つかるまでは、
延々と文字列が表示され続けることになり、とても困ります。
なお、配列の初期化の時に要素を省略した場合、残りには0が入るので、
としても、残りに0が入り、それがEOSとなるので問題ありません。char str[6] = {'M','A','R','I','O'};
前項では、char型の配列で文字列を取り扱えることを説明しました。
しかし、前項で行った文字列を代入する方法は非常に面倒です。
いちいち1文字ずつ区切って書かなければなりません。
C言語では、もっと直感的に文字列を初期化出来る方法があります。
今まで文字列を表す時には""で囲んできましたが、これを使う方法です。
なお、"" で囲んだ文字列を特に、文字列リテラルと呼ぶことがあります。
文字列リテラルを使うと、簡単に文字列の初期化が出来ます。
次のプログラムは、前項のプログラムを文字列リテラルで書き換えた例です。
このプログラムの実行結果は次のようになります。#include <stdio.h> int main(void) { char str[] = "MARIO"; printf("%s\n",str); return 0; }
この方法では、文字列を普通に書くだけで良く、要素数を省略することも出来ます。
MARIO
この方法の問題点は、宣言の時にしか使えないことです。
後から文字列を代入したい場合には、1つ1つ要素に代入するしかありません。
次のプログラムは、1つ1つ要素に代入する例です。
実行結果は、先ほどと同じになります。#include <stdio.h> int main(void) { char str[6]; str[0] = 'M'; str[1] = 'A'; str[2] = 'R'; str[3] = 'I'; str[4] = 'O'; str[5] = '\0'; printf("%s\n",str); return 0; }