前回の数値配列に引き続き文字型を使った配列について扱います。
C言語では、半角1文字を格納できる変数型charを使って文字型配列すなわち文字列を表現します。

C言語の文字列の考え方
Java、C#、Python、JavaScriptなどでは、文字列を扱うデータ型が用意されているので、Javaなど他の言語を知っているいる人からするとC言語は特殊にうつるかもしれません。
例えばJavaでは、文字列Hello, world!を変数に代入する場合、
のようにします。
C言語だとchar型の配列で文字列を表すので
となります。
他の言語の仕様も似たりよったりです。ですからC言語での文字列をchar型の配列として扱うという考え方は、プログラマの基本として頭にいれておいてもいいのではないかと思います。
文字を変数に代入する方法
C言語でのchar型は半角1文字を扱うデータ型です。
半角1文字(バイト文字とも呼びます)は、“(シングルクォーテーション)でくくります。
宣言
代入
宣言と同時に代入も可能
文字列を変数に代入する方法
char型の配列を用います。
宣言と同時に代入
要素数の省略ができます。
ここで注意したいのが、文字列を代入した際に自動的に文字列の最後に\0(ヌル文字)が挿入されるということです。
以下は、イメージです。
よって必要な文字数+1文字が配列の要素数として必要になります。
例えば「Hello」だと必要な配列要素数は6となります。
scanfで文字列を配列に読み込む場合も同様です。
また、変数宣言と同時に文字列代入は可能ですが、後から文字列を代入することはできません。
char message[16];
message = “I have a dream!”;
char message[] = “I have a dream!”;
message = “I have a pen!!!”;
文字と文字列のサンプル
24char.c
/* 24char.c 文字型 */ #include <stdio.h> int main(void) { char c = 'X'; /* 1文字 */ char message[] = "I have a dream!"; /* 文字列 */ printf("%c\n", c); printf("%s\n", message); printf("%c\n", message[4]); return 0; }
実行結果
X
I have a dream!
v
解説
C言語で半角1文字を代入する場合は、‘(シングルクォーテーション)でくくります。
char c = ‘X’; /* 1文字 */
文字列は、文字型(char型)の配列と考えるため以下のように“(ダブルクォーテーション)でくくって配列として扱います。
char message[] = “I have a dream!”; /* 文字列 */
半角1文字の出力は、printf関数の書式指定子%cを使います。
printf(“%c\n”, c);
文字列の出力は、printf関数の書式指定子%sを使います。
printf(“%s\n”, message);
配列messageは、配列の添え字を指定して1文字だけ取り出すこともできます。
printf(“%c\n”, message[4]);
配列5番目の文字を表示しています。
I have a dream!
配列messageの要素数は、16文字となります。
I have a dream!の最後に文字列の終わりを表すヌル文字(\0)が自動で気に付加されます。
キーボードから文字と文字列を入力するサンプル
25char.c
/* 25char.c 文字の入力 */ #include <stdio.h> int main(void) { char c; /* 1文字 */ char s[5]; /* 文字配列半角5文字分 */ printf("1文字入力してください: "); scanf("%c", &c); printf("文字列を入力してください: "); scanf("%s", s); printf("[%c]\n", c); printf("[%s]\n", s); return 0; }
実行結果
1文字入力してください: A
文字列を入力してください: Hello!
[A]
[Hello!]
解説
基本は前述の文字と文字列のサンプルと同様です。
配列にキーボードから入力する処理
scanf(“%s”, s);
では、入力した文字の最後に自動的に文字列の終わりを表す\0(ヌル文字)が代入されます。
ですから確保する配列要素数は最大+1となることを考慮してください。
コメント