カテゴリ: C言語 更新日: 2026/01/25

C言語の文字定数と文字列リテラルの違いを完全ガイド!初心者にもわかる基本と具体例

C言語の文字定数と文字列リテラルの違い
C言語の文字定数と文字列リテラルの違い

先生と生徒の会話形式で理解しよう

生徒

「C言語で文字を扱うときに、シングルクォーテーションとダブルクォーテーションが出てきますけど、何が違うんですか?」

先生

「それは文字定数文字列リテラルの違いが関係しています。見た目は似ているけど、中身はまったく違うものなんですよ。」

生徒

「同じように見えるのに違うんですか?間違えて使ったらどうなりますか?」

先生

「C言語ではデータの種類がとても大切なので、正しく理解することが重要です。これからゆっくり説明していきます。」

1.文字定数と文字列リテラルの違いとは?

1.文字定数と文字列リテラルの違いとは?
1.文字定数と文字列リテラルの違いとは?

まず、見た目の違いを押さえましょう。C言語では、文字を扱うときにシングルクォーテーション(')ダブルクォーテーション(")が登場します。

実はこれらはまったく違う意味を持っています。ひとつの文字を扱うのが文字定数、複数の文字の並びを扱うのが文字列リテラルです。名前が長いので覚えにくいですが、使い方を知ればとても簡単です。

文字定数('A' など) は、ひとつの文字を表すためのデータです。C言語の文字データはchar型で扱われ、数値として保存されています。

文字列リテラル("ABC"など)は、複数の文字がひとまとまりになったデータです。C言語では文字列の最後に必ずヌル文字(\0)という終わりを表す記号が自動でつきます。このおかげで、どこまでが文字列かを識別できます。

2.見た目は似ているけれど、値が違う

2.見た目は似ているけれど、値が違う
2.見た目は似ているけれど、値が違う

実際のコードを見てみましょう。同じAという文字でも、シングルクォーテーションとダブルクォーテーションでは意味が変わります。


char c = 'A';
char *s = "A";

cはひとつの文字、sは文字列です。文字列は配列として扱われるため、メモリ上では2つの要素を持ちます。「A」と「\0」です。

3.文字定数は数値として扱われる

3.文字定数は数値として扱われる
3.文字定数は数値として扱われる

C言語の文字は、実は内部的には数値として保存されています。文字にはASCIIコードという番号が割り当てられています。例えば、「A」は65という番号に対応しています。つまり、次のようなことも可能です。


#include <stdio.h>

int main() {
    char c = 'A';
    printf("%d\n", c);
    return 0;
}

65

このように、文字定数はひとつの数字として扱われます。文字列リテラルは配列なので、同じように数値として扱うことはできません。この違いを理解しておかないと、意図しないエラーが発生する可能性があります。

4.文字列リテラルは書き換えられない

4.文字列リテラルは書き換えられない
4.文字列リテラルは書き換えられない

文字列リテラルは書き換えることができません。C言語では、文字列リテラルは読み取り専用の領域に保存されるため、次のような書き換えはできません。


char *s = "Hello";
s[0] = 'A'; // これは危険な処理

これは、文字列リテラルが固定された領域に保存されているためです。変えたい場合は配列として準備します。


char s[] = "Hello";
s[0] = 'A'; // これはOK

配列に保存するとメモリ上に書き込み可能な領域が確保されるため、変更できます。初心者のうちは、文字列を書くときは配列にしておくと安全です。

5.printfで違いがわかる

5.printfで違いがわかる
5.printfで違いがわかる

画面に出力するときにも違いが出ます。


printf("%c\n", 'A'); // 文字として出力
printf("%s\n", "A"); // 文字列として出力

%cは文字を出力し、%sは文字列を出力します。これが入れ替わると正しく動作しません。

6.間違えるとエラーが起きる例

6.間違えるとエラーが起きる例
6.間違えるとエラーが起きる例

初心者がよくつまずく例として、次のようなものがあります。


char c = "A";   // 間違い
char *s = 'A';  // 間違い

どちらも型が一致していないためエラーになります。シングルクォーテーションとダブルクォーテーションは正しく使い分ける必要があります。

7.初心者が覚えておくべきポイント

7.初心者が覚えておくべきポイント
7.初心者が覚えておくべきポイント

文字定数はひとつの値、文字列リテラルは複数の値という違いを意識しましょう。ひとつだけ扱いたいなら'A'、複数扱いたいなら"ABC"を使います。

どちらも見た目は似ていますが、扱い方を間違えると正常に動かなくなります。C言語は厳密なプログラミング言語なので、小さな記号の違いに意味があります。

関連記事:
カテゴリの一覧へ
新着記事
New1
C++
C++のメンバアクセス演算子を完全解説!初心者でもわかる . → :: の使い方まとめ
New2
Rust
Rustの文字列を極める!&str(文字列スライス)の基本概念とString型との違い
New3
C++
C++のキャスト演算子を完全解説!dynamic_cast・static_cast・const_cast・reinterpret_castを初心者向けに説明
New4
C++
C++開発のIDE選びを完全ガイド!初心者でもわかるCLion・Eclipse CDT・Qt Creator比較
人気記事
No.1
Java&Spring記事人気No1
C++
C++の主要な実装をわかりやすく解説!GCC・Clang・MSVCの違いと特徴
No.2
Java&Spring記事人気No2
C言語
C言語を学ぶ初心者におすすめの環境構築手順【2025年版】
No.3
Java&Spring記事人気No3
C言語
C言語をオンラインで実行できる便利なコンパイラサービスまとめ【初心者向け】
No.4
Java&Spring記事人気No4
C言語
C言語のソースコードとヘッダファイルの役割とは?初心者向けにわかりやすく解説!
No.5
Java&Spring記事人気No5
C言語
C言語開発でよく使われるエディタとIDEランキング【初心者向け完全ガイド】
No.6
Java&Spring記事人気No6
C言語
Visual Studio CodeでC言語を実行する方法【拡張機能の設定と実行手順】
No.7
Java&Spring記事人気No7
C++
C++リンカとコンパイラのオプション設定を完全ガイド!初心者にもわかる開発環境の基礎
No.8
Java&Spring記事人気No8
C言語
C言語の列挙型(enum)の使い方を完全ガイド!初心者でもわかる基本操作