
はじめての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 ~/Desktop2. コンパイルする
clang char_sample.c -o char_sample3. 実行する
./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言語の文字と文字列の基本を確認しました。
文字列が配列であることを理解すると、配列の知識とつながって理解しやすくなります。
次回予告
次は、標準入力を学びます。
キーボードから値を受け取れるようになると、プログラムがより実用的になります。


