文字列: 文字の配列
C言語にString型はない。「ヌル文字」が支配する世界。
ヌル終端文字
文字列の終わりを表す特殊文字。数値の0。
文字列リテラル
"..." で囲まれた文字データ。書き換えできない領域に置かれることが多い。
String型は幻
C言語に String という型は存在しません。あるのは「文字(char
)が並んだ配列」だけです。
しかし、配列だけでは「どこで文字が終わるか」が分かりません。そこでC言語は 「ヌル文字が出たらそこで終了」 というルールを定めました。これは絶対の掟です。
"ABC" という文字列は、メモリ上では A, B, C, ヌル
という4バイトのデータとして存在します。
ヌル終端文字の恐怖
ヌル文字を入れるスペースを忘れると、プログラムは「終わり」を見つけられず、メモリの彼方まで読み進んでしまいます。
// そもそも "文字列型" がないchar name[5] = "Alice";// ['A', 'l', 'i', 'c', 'e'] ... あれ?終端は?
// 表示しようとすると...printf("%s", name);// "Alice烫烫烫烫..." (ゴミデータが表示される、またはクラッシュ)// ✅ 正しい文字列宣言
// 方法1: 十分なサイズを確保char name1[6] = "Alice"; // 5 chars + null terminator
// 方法2: コンパイラに任せる(推奨)char name2[] = "Alice"; // 自動でサイズ6になる
// 方法3: ポインタ(定数文字列)const char *name3 = "Alice"; // 書き換え不可実践テクニック
書き換え不可の文字列
char *s = "Hello"; と書いた場合、この "Hello"
は書き換えできないメモリ領域に置かれることが多いです。s[0] = 'h';
とするとクラッシュします。変更したい場合は必ず配列として宣言してください(
char s[] = "Hello";)。
演習課題
課題1: 一文字表示
自分の名前を配列に入れ、ループを使って1文字ずつ改行して表示してください。ヌル文字までループする条件式を書いてみましょう。
合格ライン
文字列の最後に必ずヌル文字が必要だと知っている
5文字の単語には最低6バイト必要だと即答できる