TIL

Today I Learned. 知ったこと、学んだことを書いていく

文字列 - 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]
[]

おぉ、空の文字が出てるから、たぶんこれが終端文字なのかな?

参考文献