
【6日でできるC言語入門】文字列と配列
C言語において文字列は、他の多くの言語のような特別なデータ型ではなく、char型の配列として管理されています。
たとえば「Hello」や「Taro」などの文字列データも、実際はchar型の配列に1文字ずつ格納され、最後に「終端文字(NULL文字)」\0が自動的に入ります。
ここでは、C言語における「文字列」と「配列」の関係、char配列の扱い、初期化や入出力、そして文字列の本質的な特徴について詳しく学びます。

1.文字列と配列の基本
1.1. char型配列による文字列の扱い
C言語では、char型の配列に文字を1文字ずつ格納し、最後に必ず「終端文字」\0(NULL文字)を入れることで「文字列」となります。
サンプルプログラム1:文字列の定義と表示
プロジェクト/ファイル名: Lesson34_1/main.c
#include <stdio.h>
int main(void) {
char msg1[5] = { 'H', 'e', 'l', 'l', 'o' }; // 単なる文字配列(終端なし)
char msg2[6] = { 'H', 'e', 'l', 'l', 'o', '\0' }; // 文字列(終端あり)
char msg3[] = "World"; // 自動で終端文字付き
printf("msg2: %s\n", msg2); // OK
printf("msg3: %s\n", msg3); // OK
// printf("msg1: %s\n", msg1); // NG: 終端文字がないので正しく表示されない
return 0;
}実行結果
msg2: Hello
msg3: World| 宣言例 | 内容 | 終端文字 |
|---|---|---|
| char s[4] = {'a','b','c','\0'}; | "abc"(文字列) | 必要 |
| char s[] = "Cprogram"; | "Cprogram"(自動終端付き) | 必要 |
1.2. 配列と文字列の違い・特徴
- 文字列=char配列+終端文字(\0)
- 1文字ずつ
''で書く場合は、終端文字の追加が必須 - ダブルクォートで書く場合は自動で「\0」が追加される。
2.文字列の入出力とNULL文字
2.1. 文字列の入力
文字列入力にはscanf("%s", 配列名);を使います。
サンプルプログラム2:キーボードから文字列入力
プロジェクト/ファイル名: Lesson34_2/main.c
#include <stdio.h>
int main(void) {
char name[10];
printf("お名前を入力してください: ");
scanf("%s", name); // 9文字+終端
printf("入力された名前: %s\n", name);
return 0;
}実行結果
「SDLチェック」を「いいえ」にして、プログラムを実行します。
お名前を入力してください: Taro
入力された名前: Taro2.2. scanfで文字列入力時、&が不要な理由
scanf関数で数値入力(例:int n; scanf("%d", &n);)の場合は変数のアドレス(&n)が必要です。
これは、scanfが指定されたメモリアドレスに値を書き込むからです。
一方で文字列入力(char s[10]; scanf("%s", s);)の場合、
配列名s自体が「配列の先頭アドレス」を表すので、&は不要です。
| 入力例 | 理由 |
|---|---|
| scanf("%d", &n); | nの「アドレス」を指定(int型変数1つ分) |
| scanf("%s", s); | sは「配列の先頭アドレス」なので&は不要 |
3.文字列の本質とNULL文字
3.1. NULL文字の役割
- C言語の文字列の最後には必ず「'\0'」という終端文字が入る。
- 終端文字は「ここまでが文字列ですよ」という印
- printfで文字列を表示する場合、
'\0'までを表示する。
例:NULL文字による終端
| 変数 | 0 | 1 | 2 | 3 | 4 | 5 |
|---|---|---|---|---|---|---|
| char s[] = "cat"; | 'c' | 'a' | 't' | '\0' |
4.文字列とASCIIコード
4.1. char型と文字コード
char型は「文字」ですが、実体は整数値(ASCIIコード)です。
例えば 'A' は 65、 'a' は 97、 '\0' は 0 です。
プロジェクト/ファイル名: Lesson34_3/main.c
#include <stdio.h>
int main(void) {
char ch = 'A';
printf("'%c' のASCIIコード: %d\n", ch, ch);
return 0;
}実行結果
'A' のASCIIコード: 65まとめ
- C言語で文字列はchar型配列+終端文字
\0で実現される。 - 配列名は先頭アドレスを指すためscanfで&は不要
- 文字コード(ASCII)や終端文字の役割を理解しよう。
- 文字列と配列の扱いに慣れることがC言語マスターへの第一歩!
