C言語入門|C言語で文字列を扱う最初の壁:String型の擬似導入と安全な使い方

「文字列ってどう扱うの?😢」と悩むあなたへ、やさしく解説!

C言語って、数値や1文字を扱うのはとても得意なんですが……実は “文字列を扱うための専用の型(String型)”が最初から用意されていません。
これは Java や Python を触った経験がある人にとっては衝撃ですよね 🫢

でも安心してください!
この記事では、C言語の「文字列の壁」を越えるための秘密兵器として、CでString型を“擬似的に使えるようにする方法” をやさしく紹介します。

💡他の言語にはある“文字列型”が、なぜCにはないの?

Java を例にすると……

String monsterName = "ケルベロス";

こんなふうに 好きな文字列をそのまま変数に入れられます。
とても便利で、入門者には欠かせない仕組みですね✨

ところが C 言語では……

  • 1文字 → char
  • 数値 → int, double
  • 文字列 → ❌「専用型なし」

えっ……文字列を扱えなかったら、名前もメッセージも表示できないじゃん!と誰でも思いますよね 😭
これが “C言語入門者が最初にぶつかる壁” なんです。

🧱入門者の前に立ちはだかる「文字列の壁」

C言語で文字列を使うには、実は…

  • 配列
  • メモリの管理
  • 終端文字(\0)
  • ポインタ

といった “難しめ” の概念を知る必要があります。

だからこそ、プロでも混乱することの多い領域なんです💦

✨救世主登場!String型を“作り出す”おまじない

「じゃあ、String型が無いなら作ればいいじゃない?😎」

というわけで、次の1行を書くだけで C でも String型“っぽいもの”が使えるようになります。

typedef char String[1024];

これは「char の配列を String という新しい名前で呼べるようにする」命令です。

🧙‍♂️ちょっと解説:typedef の書式

書式意味
typedef 既存の型 新しい型名;型に別名をつける。

つまり……

  • char[1024] → “1024文字入る配列”
  • String → その別名

🧪動かしてみよう!

プロジェクト名:2-11-1 ソースファイル名: sample2-11-1.c

#include <stdio.h>

typedef char String[1024];  // 文字列型っぽいものを作る

int main(void)
{
    String heroName = "アークナイト";
    printf("勇者の名前は%sです!\n", heroName);  // 文字列は%sで表示
    return 0;
}

👀 たった1行で String型が使えた!
これでもう "アークナイト" みたいな文字列を気軽に扱えるようになります 🎉

⚠️でも待って!String型には“安全に使うためのルール”がある

とくに大事なのが、次の3つの約束です。

📝String型の3つの大切なルール

ルール内容
① 配列サイズ1024を小さくしてはいけない小さいと文字列が入り切らず危険
② 「1024文字入る」と思ってはいけない実際には全角文字はもっと少ししか入らない
③ 初期化以外で“=”代入をしてはいけない配列に = は禁止!破壊的なバグの原因

③が特に重要‼️

String a = "ミノタウロス";  // OK(初期化)
String b;
b = "クラーケン";           // NG(= で代入してはいけない)
String c = a;              // NG(変数の代入も不可)

なぜ = が使えないのか?
→ String は「配列」であり、配列への代入は C 言語の仕様上できないためです。

このあたりは 配列とポインタの仕組み を理解すると腑に落ちますが、今はルールとして覚えておけばOK👌

📦 配列を使って文字列を扱う方法(String型の本質はこちら)

実は String型の正体は 配列 なので、次のように書けば文字列は扱えます。

char name[20] = "slime";  // 文字列として初期化

配列と文字列の関係

文字slime\0
役割1文字1文字1文字1文字1文字終端文字

C言語では、文字列は「最後に \0 を持つ文字の集まり」です。
つまり、「\0」を忘れると文字列は壊れます😱
String型はこの \0 を自動でつけてくれるので便利なんです。

🧭識別子(変数名)の命名規則

プログラミングに慣れていくと、読みやすい名前の付け方も重要になります。

名前の付け方特徴
アッパーキャメルMyAge型名・構造体名に使われることも
ロワーキャメルmyAge関数名・変数名によく使う
スネークケースmy_ageC言語では一般的
チェインケースmy-age❌ Cでは使用不可

このサイト「C言語入門」の記事では次のルールで表記していきます👇

  • 関数名:ロワーキャメル(動詞で始める)
  • 変数名:ロワーキャメル(名詞で始める)
  • 定数名:スネークケース(大文字)
  • ユーザー定義型名:アッパーキャメル