第10回|文字と文字列の基本を学ぶ:C言語で文字データを扱う

当サイトでは、コンテンツの一部に広告を掲載しています。
第10回|文字と文字列の基本を学ぶ:C言語で文字データを扱う

はじめてのC言語 | 第10回

目次

はじめに

前回は、同じ型の値をまとめて扱う配列を学びました。今回は、C言語で文字と文字列を扱う方法を確認します。

この回の目的は次の4点です。

  • char 型の基本を理解する
  • 文字と文字列の違いを知る
  • 文字列を配列として扱う考え方を学ぶ
  • printf で文字列を表示できるようにする

文字と文字列は違う

C言語では、文字と文字列は別のものです。

  • 文字: 1文字だけのデータ
  • 文字列: 複数の文字が並んだデータ

たとえば次は文字です。

'A'

次は文字列です。

"ABC"

この違いは重要です。

  • 文字はシングルクォーテーション ‘ ‘ で囲む
  • 文字列はダブルクォーテーション ” ” で囲む

char 型とは何か

char は、1文字を扱うための型です。

例:

char ch = 'A';

このコードは、文字 A を変数 ch に代入しています。

文字を表示する

サンプルコード

char_sample.c という名前で保存します。

#include <stdio.h>

int main(void) {
    char ch = 'A';

    printf("%c\n", ch);

    return 0;
}

実行手順

1. 作業ディレクトリに移動する

cd ~/Desktop

2. コンパイルする

clang char_sample.c -o char_sample

3. 実行する

./char_sample

実行結果:

A

%c の意味

printf で文字を表示するときは %c を使います。

printf("%c\n", ch);
  • %c : 1文字を表示する
  • ch : 表示する文字

整数の %d とは異なるので注意が必要です。

文字列とは何か

C言語では、文字列は char 型の配列として扱います。

たとえば “Hello” は、内部的には文字が並んだデータです。

  • H
  • e
  • l
  • l
  • o

さらに、C言語の文字列の末尾には、文字列の終わりを表す特別な値 ‘\0’ が自動で付きます。
これをヌル文字と呼びます。

文字列を表示する

サンプルコード

string_sample.c という名前で保存します。

#include <stdio.h>

int main(void) {
    char message[] = "Hello";

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

    return 0;
}

実行結果:

Hello

%s の意味

printf で文字列を表示するときは %s を使います。

printf("%s\n", message);
  • %s : 文字列を表示する
  • message : 表示する文字列

文字列は char 配列である

次のコードを見てください。

char message[] = "Hello";

これは、文字列を char 型の配列に入れています。

配列として考えると、概念的には次のようになります。

  • message[0] は ‘H’
  • message[1] は ‘e’
  • message[2] は ‘l’
  • message[3] は ‘l’
  • message[4] は ‘o’
  • message[5] は ‘\0’

文字列の各文字を取り出す

文字列は配列なので、添字で各文字を取り出せます。

#include <stdio.h>

int main(void) {
    char message[] = "Hello";

    printf("%c\n", message[0]);
    printf("%c\n", message[1]);
    printf("%c\n", message[2]);

    return 0;
}

実行結果:

H
e
l

配列として初期化する書き方

文字列は次のようにも書けます。

char message[] = {'H', 'e', 'l', 'l', 'o', '\0'};

これは “Hello” と同じ内容です。
ただし、通常は次の書き方の方が分かりやすいです。

char message[] = "Hello";

文字列の長さと終端文字に注意する

C言語の文字列では、末尾の ‘\0’ が非常に重要です。
これがないと、どこまでが文字列なのか判断できません。

たとえば、次のように配列サイズを自分で指定する場合は注意が必要です。

char message[6] = "Hello";

Hello は5文字ですが、最後に ‘\0’ が必要なので、要素数は6になります。

配列サイズが足りない例

次のコードは問題があります。

char message[5] = "Hello";

“Hello” には終端文字 ‘\0’ も必要なので、サイズ5では足りません。
このようなコードはコンパイル時に警告やエラーの原因になります。

文字列と文字の違いを整理する

文字

char ch = 'A';
printf("%c\n", ch);

文字列

char message[] = "A";
printf("%s\n", message);

見た目は似ていますが、意味は異なります。

  • ‘A’ は1文字
  • “A” は文字列

初心者がつまずきやすい点

‘A’ “A” を混同しない

これは非常に重要です。

  • ‘A’ : 文字
  • “A” : 文字列

%c と %s を混同しない

  • %c : 文字
  • %s : 文字列

誤った組み合わせでは、意図しない結果や警告の原因になります。

文字列の終わりには ‘\0’ が必要

文字列は、単なる文字の並びではなく、終端文字で終わるデータです。
文字配列を手で組み立てるときは、この点を忘れないようにします。

よくあるエラー


warning: format specifies type ‘char *’ but the argument has type ‘int’

原因: %s に文字を渡しているなど、書式指定子が型と合っていません

warning: multi-character character constant

原因: シングルクォーテーションで複数文字を書いています。

誤った例:

char ch = 'AB';

1文字だけにする必要があります。

配列サイズ不足

原因: 文字列終端 ‘\0’ を含むサイズを確保していません。

練習用コード

文字を表示する

#include <stdio.h>

int main(void) {
    char ch = 'Z';
    printf("%c\n", ch);
    return 0;
}

文字列を表示する

#include <stdio.h>

int main(void) {
    char text[] = "C language";
    printf("%s\n", text);
    return 0;
}

文字列の先頭文字を表示する

#include <stdio.h>

int main(void) {
    char text[] = "Apple";
    printf("%c\n", text[0]);
    return 0;
}

実行結果:

A

まとめ

今回のポイントは次のとおりです。

  • char は1文字を扱う型である
  • 文字は ‘A’、文字列は “A” のように書く
  • 文字列は char 型の配列である
  • 文字列の末尾には ‘\0’ が必要である
  • printf では文字に %c、文字列に %s を使う

この回では、C言語の文字と文字列の基本を確認しました。
文字列が配列であることを理解すると、配列の知識とつながって理解しやすくなります。

次回予告

次は、標準入力を学びます。
キーボードから値を受け取れるようになると、プログラムがより実用的になります。

あわせて読みたい
第11回|scanfで入力を受け取る:キーボードから値を読む基本 はじめてのC言語 | 第11回 はじめに 前回は、文字と文字列の基本を学びました。今回は、キーボードから入力を受け取る方法を扱います。 この回の目的は次の4点です。 ...

さらに学びたいあなたへ

用途ごとに選ぶ Linux のおすすめ本

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

のいのアバター のい UNIX Cafe マスター

Macintosh Color Classicから始まった旅は、長いWindows時代を経て、Windows10のサポート終了をきっかけにUNIXの世界へ戻ってきました。UNIX Cafeでは、UNIX・Linux・そしてMacな世界を、むずかしい言葉を使わず、物語のように書いています。プログラミングは、アイデアをコンピューターに伝えるための言葉です。簡単な単語と文法を覚えれば、誰でもコマンドを使えます。ぜひ一度、やさしいプログラミングの世界をのぞいてみてください。

Created by UNIX Cafe

目次