【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
入力された名前: Taro

2.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文字による終端

変数012345
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言語マスターへの第一歩!