配列を使った文字列の格納

多くのプログラミング言語では文字列を扱うデータ型が用意あれていますが、 C 言語では文字列を格納するためのデータ型がないため、文字列を複数の文字が連続したものであることから char 型の配列を使って格納します。ここでは C 言語で文字列を char 型の配列を使って格納する方法について解説します。

(Last modified: )

配列を使った文字列の格納

C 言語において文字は 'a' や 'B' などのアルファベットの 1 文字で表されるものです。文字は文字コードと呼ばれる数値がそれぞれの文字に割り当てられており、文字を格納する場合は char 型の変数を使用することで可能でした。

文字列と言うのは複数の文字が連続したものです。具体的には "Hello" など複数の文字を連続してつなげることで一つの文字列となります。

他のプログラミング言語においては文字列を扱うためのデータ型が別途用意されていますが C 言語では文字列を格納するためのデータ型はありません。そこで文字列を格納する場合には、文字列が複数の文字が連続したものであることから char 型の配列を使って一つ一つの文字に分解して配列の各要素に格納するようにします。

例えば "Hello" と言う文字列を char 型の配列に格納してみます。 "Hello" は 5 文字ですので要素数 5 の配列を利用します。

char str[5];

str[0] = 'H';
str[1] = 'e';
str[2] = 'l';
str[3] = 'l';
str[4] = 'o';

一見するとこれで問題無いように思われますが、これは文字列ではなく char 型の配列です。文字数が分かっていて順番に出力するようなプログラムであればこれでいいのですが、今後出てくる文字列に対する関数を利用する場合には配列に格納されている文字のどこまでが 1 つの文字列なのかを分かるようにしなければなりません。

そこで文字列として利用する場合は最後に 0 を格納する規則になっています。数値の 0 をそのまま入れても構いませんが、文字列の最後ということが分かりやすいように文字コードとして 0 が割り当てられている \0 を代わりに使用するのが慣例です。( \0 は NULL 文字と呼ばれています)。

char str[6];

str[0] = 'H';
str[1] = 'e';
str[2] = 'l';
str[3] = 'l';
str[4] = 'o';
str[5] = '\0';

このように配列の要素数は最低でも文字数+ 1 文字が必要となります。逆に文字数+ 1 文字分だけ確保されていればより大きな要素数の配列に対して文字を格納しても構いません。

char str[20];

str[0] = 'H';
str[1] = 'e';
str[2] = 'l';
str[3] = 'l';
str[4] = 'o';
str[5] = '\0';

配列の要素数は 20 ですが、文字列として利用する時には配列の要素数ではなく \0 が現れるまでを 1 つの文字列として扱うためです。逆に要素数が少ない場合、 C 言語ではエラーではなく確保されていない領域に文字を書き込んでしまいますので注意が必要です。

サンプルコード

では簡単なサンプルプログラムを作成して試してみます。

#include <stdio.h>

int main(void){
  char str[6];

  str[0] = 'H';
  str[1] = 'e';
  str[2] = 'l';
  str[3] = 'l';
  str[4] = 'o';
  str[5] = '\0';

  printf("%s\n", str);

  return 0;
}

上記を「test1-1.c」の名前で保存します。まずコンパイルを行います。

文字列と配列

コンパイルが終わりましたら「test1-1」と入力して実行します。

文字列と配列

今回は文字の配列を1文字ずつ出力するのではなく、文字列としてまとめて出力しました。このように「char」型の配列に文字を格納し最後に「\0」を付けて文字列とすることで、文字列のために用意された便利な関数などが利用できるようになります。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。