C言語学習ポータル(無料版) 学習コンテンツ 文字列 文字コードの基礎——ASCIIとUTF-8

🔤 文字列

文字コードの基礎——ASCIIとUTF-8

無料公開版に収録・読む目安 13分

🎯 文字が数値であることを理解し、文字コードを使った計算ができる

コンピュータは数値しか扱えません。ではなぜ文字を表示できるのか。答えは単純で、文字にも番号が振ってあるからです。「A は65番」という対応表があり、その代表が ASCII です。

#include <stdio.h>

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

    printf("%c\n", c);    // A   ← 文字として表示
    printf("%d\n", c);    // 65  ← 数値として表示
    return 0;
}

同じ変数を %c で見れば文字、%d で見れば数値。char は「1バイトの小さな整数型」であり、文字はその値の解釈にすぎません。

覚えておくと得をする番号

文字値
'0' 〜 '9'48 〜 57
'A' 〜 'Z'65 〜 90
'a' 〜 'z'97 〜 122

ここで大事なのは、連続して並んでいることと、大文字と小文字がちょうど32違うことです。この2つの性質から、便利な計算が生まれます。

#include <stdio.h>

int main(void)
{
    char d = '7';

    printf("%d\n", d - '0');        // 7 ← 文字の数字を数値に変換
    printf("%c\n", 'a' - 32);       // A ← 小文字を大文字に
    printf("%d\n", 'z' - 'a' + 1);  // 26 ← アルファベットの数
    return 0;
}

d - '0' は暗記して構いません。文字 '7'(55)から '0'(48)を引くと 7。文字で入力された数字を計算に使うときの定番です。逆に、数値 7 を文字にしたければ 7 + '0' とします。

表そのものを丸暗記する必要はありません。覚えておくべきは「連続して並んでいる」「大文字と小文字は32違う」「数字は '0' から始まる」の3点だけ。具体的な値が必要になったら printf("%d\n", 'A'); で調べればすみます。

日本語はどうなっているのか

ASCIIは英数字と記号だけの表で、127番までしかありません。日本語を表すには足りないので、現在は UTF-8 という方式が広く使われています。UTF-8では、英数字は1バイトのまま、日本語のほとんどは3バイトで表されます。

printf("%zu\n", strlen("abc"));   // 3
printf("%zu\n", strlen("あいう")); // 9(3文字 × 3バイト)

strlen が数えているのはバイト数であって文字数ではありません。ここから重要な結論が出ます。

Cで日本語を1文字ずつ正確に扱うには専用の処理が必要です。初学の段階では「日本語は表示だけ、加工は英数字で」と割り切って進めるのが安全です。文字列をそのまま printf に渡して表示するぶんには、日本語でも何も問題ありません。

罠・注意

まとめ: 文字は数値。'A' は65、'0' は48で、それぞれ連続して並んでいます。c - '0' は定番、日本語はUTF-8で複数バイトです。

要点まとめ

アプリで演習問題まで解く(無料・登録不要)

この項目に出てくる用語

文字列もじれつ

文字が連なったデータのこと。C言語ではchar型の配列として表現され、その末尾には終わりを示す番人の文字が置かれる。"Hello"のようにダブルクォートで囲んで書くのが文字列リテラル。

変数へんすう

値を入れておくための名前付きの箱のこと。名前をつけることで中身を自由に出し入れできる、プログラムの記憶場所にあたる。変数名は自由に付けられるが、意味の分かる名前にすると読みやすいコードになる。

同じトラックのほかの項目

文字列とはchar配列であるCの文字列がchar配列であることを理解し、宣言・表示・1文字ずつのアクセスができる ヌル終端 '\0' の掟ヌル終端の役割を理解し、必要な配列サイズを正しく見積もれる 文字列リテラルと初期化文字列の初期化の書き方を使い分け、代入できない理由を説明できる string.h の主要関数strlen・strcpy・strcat・strcmp の役割と使い方を説明できる 安全な文字列操作——バッファサイズの意識バッファオーバーフローの危険を理解し、snprintfやfgetsで安全に書ける 文字の判定と変換(ctype.h)ctype.hの判定・変換関数を使って、文字の種類を調べたり大文字小文字を変換できる 文字列処理の定石パターン文字列を1文字ずつ走査する型を身につけ、数える・削る・逆順にするが書ける
‹ 文字の判定と変換(ctype.h) 文字列処理の定石パターン ›

もっと先へ:ポインタ・メモリ・ファイル入出力・セキュアコーディングを含む全26トラックと、段位検定・模試のフルセットは完全版に収録しています。

完全版(BOOTH)を見る

📚 姉妹教材:手を動かして覚える Linux 教材 — Linuxとインフラの仕組みを地図で学ぶ

Web版 / BOOTH