
C言語基礎|空文字列
「文字がなくても意味がある ― C言語の文字列はナル文字から始まる」
文字列と聞くと、文字が並んでいるものを思い浮かべがちですが、
C言語では 文字が1つもない文字列 も、きちんと意味を持つ存在です。
そのような文字列を 空文字列 と呼びます。
見た目は何もありませんが、内部では「文字列として成立するための最低限のルール」を守っています。
ここでは、
- 空文字列の正体
- 配列との関係
- 入力処理での注意点
を、図や表を使いながら丁寧に見ていきましょう。
空文字列とは何か
空文字列とは、
文字数が 0 個の文字列 のことです。
ただし、C言語の文字列には大切な約束があります。
文字列は、必ずナル文字で終わる
この約束のおかげで、空文字列であっても、
ナル文字 1 個だけ は必ず存在します。
空文字列を格納する配列
次の宣言を見てみましょう。
char ns[] = "";
これは「空文字列を格納する配列」です。
要素数は 0 ではなく 1 になります。
内部の状態
| 添字 | 中身 |
|---|---|
| 0 | '\0' |
つまり、次の宣言と完全に同じ意味です。
char ns[1] = {'\0'};
図で見る空文字列
図のイメージ

空文字列は
「何も入っていない」のではなく、「終わりだけが入っている」
という点がとても重要です。
文字列と文字数の関係
| 内容 | 見かけの文字数 | 配列に必要な要素数 |
|---|---|---|
| "ABC" | 3 | 4 |
| "" | 0 | 1 |
文字数 + 1(ナル文字)
これが、文字列を扱うときの基本ルールです。
文字列の読み込みと空文字列
ここからは、文字列の読み込みについて見ていきましょう。
サンプルプログラム
入力された単語を表示する、シンプルな例です。
プロジェクト名:chap9-4-1 ソースファイル名:chap9-4-1.c
Visual Studio でこのプログラムを実行するには、SDLチェック設定を変更しておく必要があります。
1.プロジェクト名を右クリックして、「プロパティ」をクリックします。
2.「C/C++」→「全般」→「SDLチェック」を「いいえ」に切り替えて「OK」をクリックします。
#include <stdio.h>
int main(void)
{
char word[32];
printf("好きな言葉を入力してください:");
scanf("%s", word);
printf("入力された言葉は「%s」です。\n", word);
return 0;
}実行例
好きな言葉を入力してください:Hello
入力された言葉は「Hello」です。scanf と文字列の仕組み
scanf を使って文字列を読み込むときのポイントを整理します。
scanf の書式
int scanf(const char *format, ...);
%s の意味
| 指定子 | 意味 |
|---|---|
| %s | 空白までの文字列を読み込む |
scanf が内部で行うこと
- キーボードから文字を順に読み込む。
- 配列に1文字ずつ格納する。
- 最後にナル文字を自動で追加する。
この動作のおかげで、
私たちはナル文字を意識せずに文字列を扱えます。
配列名に & を付けてはいけない理由
次の書き方は 誤り です。
scanf("%s", &word);
理由はシンプルです。
- 配列名そのものが、先頭要素のアドレスを表す。
- 余計な & を付けると、型が合わなくなる。
正しい書き方
scanf("%s", word);
入力サイズと空文字列の関係
配列の要素数が 32 の場合、
- 入力できる文字数は最大 31
- 最後の 1 文字はナル文字用
もし何も入力されなければ、
配列には 空文字列 が格納される可能性もあります。
空文字列は「状態」を表す
空文字列は、次のような意味を表すのに便利です。
| 状態 | 表現 |
|---|---|
| まだ入力されていない | 空文字列 |
| 初期状態 | 空文字列 |
| 内容がない | 空文字列 |
単なる「何もない」ではなく、
明確な意味を持つ状態 として使えるのがポイントです。
演習問題
演習9-2
次のように宣言された文字列 s を、
空文字列にする操作を示してください。
char s[] = "ABC";
解答例
s[0] = '\0';
解説
- 文字列は、最初のナル文字までが有効
- 先頭にナル文字を置けば、文字数は 0 になる。
- 配列のサイズは変わらないが、内容は空文字列になる。
この方法は、とてもよく使われます。
まとめ
- 空文字列は、文字数 0 の文字列
- 実体は「ナル文字だけの配列」
- 文字列の終端は必ずナル文字
- 配列とセットで考えることが大切
- 入力処理でも空文字列は自然に登場する。
