C初級:文字配列での2次元配列イメージ

C言語初級カテゴリのロゴ画像C言語初級
スポンサーリンク

通常の文字列はC言語の場合、配列として変数に代入できる。

char s[] = “ABCDE”;

上記の場合、「E」の後に「\0」ヌル文字が追加されるため、配列要素数は6となる。

C言語で文字列を複数個変数に代入したい場合、2次元配列を使う。

/* 複数個の文字列を代入する */
#include <stdio.h>
int main(void)
{
	char s[][4] = {"ABC", "DE", "FGH"};
	
	printf("%s\n", s[0]);
	printf("%s\n", s[1]);
	printf("%s\n", s[2]);
	
	return 0;
}

実行イメージ

ABC
DE
FGH

上記プログラムを実行した際の配列sのイメージ
C初級:文字配列での2次元配列イメージ

ちなみにシングルクォーテーションを使い1文字ずつ代入もできるが、あまり使わない方法だろう。

/* 複数個の文字列を代入する2 */
#include <stdio.h>
int main(void)
{
	char s[][3] = {'A', 'B', 'C', 'D', 'E', 'F', 'G'};
	
	printf("%s\n", s[0]);
	printf("%s\n", s[1]);
	printf("%s\n", s[2]);
	
	return 0;
}

この場合実行は出来るが、配列s[0]とs[1]は最後にヌル文字が入力されないため、printf関数の表示ではおかしくなる。

この場合配列sのイメージはこんな感じ
C初級:文字配列での2次元配列イメージ

わたしのコンパイラでは、以下のように表示されてしまった。

ABCDEFG
DEFG
G

きちんと利用できるようにするためには、こんな風に強制的にヌル文字を追加せねばならない。

/* 複数個の文字列を代入する3 */
#include <stdio.h>
int main(void)
{
	char s[][3] = {'A', 'B', '\0', 'C', 'D', '\0', 'E'};
	
	printf("%s\n", s[0]);
	printf("%s\n", s[1]);
	printf("%s\n", s[2]);
	
	return 0;
}

AB
CD
E

スポンサーリンク

サンプル:2次元配列で設定した英単語を全て表示する

/* 2次元配列で設定した英単語を全て表示する */
#include <stdio.h>
int main(void)
{
	int i;
	char tango[][10] = {"Apple", "Kiwi", "Lemon", "Melon", "Orange"};
	
	for(i=0; i<5; i++){
		printf("%s\n", tango[i]);
	}
	
	return 0;
}

実行イメージ

Apple
Kiwi
Lemon
Melon
Orange

コメント