文字列 - C言語
C言語では文字列型というものはなく、char(文字)型の配列で表現する。
宣言は以下のようになる
char str1[];
また、文字列の最後の要素には必ずヌル文字(終端文字 '\0'
)が入っていることに注意する。
終端文字が入っているため、"Hello"
という文字を表す文字列(文字の配列)の場合、以下のようになる。
'H', 'e', 'l', 'l', 'o', '\0'
なので、文字列は「実際に格納されている文字数 + 1 の要素数の配列」ということになる
値の初期化
charの配列に文字列リテラルで初期化を行うと、自動的にその文字列の長さ+1の要素数で配列の要素数を決めてくれる。また、終端文字も自動で入れてくれる。
以下の2つは同じ意味になる。
char str1[] = "Hello"; char str1[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
※ 文字列リテラルを使った値の設定は宣言時のみ使うことができる。なので、以下のように記述するとエラーになる。
// だめな例 char str1[6]; str1 = "Hello";
終端文字の存在
終端文字が本当にあるのかを見てみた
"Hello"
というcharの配列の要素を出力してみた
// string_test.c #include <stdio.h> int main(void){ char str1[] = "Hello"; int size = sizeof str1; for (int i = 0; i < size; i++){ printf("[%c]\n", str1[i]); } }
実行結果
[H] [e] [l] [l] [o] []
おぉ、空の文字が出てるから、たぶんこれが終端文字なのかな?