C言語入門(文字を扱うchar型変数)

C言語

お疲れ様です。サンチョです!
今回は文字を扱う変数についてご紹介します。

文字はchar型変数で扱う

文字を代入する変数はchar型で定義します。
まずはサンプルをコピペして感覚をつかんでください。

#include<stdio.h>
int main() {
    char moji = 'A';
    printf("文字は %c です\n", moji);
}

※これを実行すると「文字は A です」と表示されます。

代入する文字はシングルクォーテーション(’)で囲んでください。
尚、文字を表示する際の変換指定子は「%cです。

変換指定子を「%d」にしたらどうなるの?

試しにサンプルの「%c」を「%d」に書き換えると65と表示されます。
この数値は10進数で表現された文字コード(ASCIIコード)です。

すべての文字は文字コードという数字の組み合わせで定義されているので、
「%d」なら10進数「%c」なら文字として表示されるんですね。
次のサンプルを実行してみると、より実感できると思います。

#include<stdio.h>
int main() {
    int num = 65;
    printf("数字 %d は文字だと %c です\n", num, num);
}

※これを実行すると「数字 65 は文字だと B です」と表示されます。

もとが数値ということなので、次のような計算式も作れちゃいます。

#include<stdio.h>
int main() {
    char moji = 'A';
    printf("文字は %c です\n", moji + 1);
}

※これを実行すると「文字は B です」と表示されます。
文字コードは「A」が「65」、「B」が「66」と定義されているので
「A + 1」とすると「B」になります。

文字列はchar型の配列で扱う

文字列とは、簡単にいうと「Hello」というような文字のまとまりのことです。

実はchar型の変数には1文字しか代入することができないので
文字列を扱いたい場合は、char型の配列を用意する必要があります。

#include<stdio.h>
int main() {
    char mojiretsu[6] = { 'H','e','l','l','o','\0' };
    printf("文字列は %s です\n", mojiretsu);
}

※これを実行すると「文字列は Hello です」と表示されます。

EOS(終端文字)

サンプルをみると「\0」って何?と思いますよね。
これはEOSEnd Of String)と呼ばれるもので、文字列の終わりを表しています。
日本語に直訳すると終端文字ですね。

サンプルで扱っている文字列は「Hello」なので5文字ですが、
終端文字を入れるために、配列の要素数は6を指定しています。
もし配列の要素数が5で、終端文字がなかったらどうなるか?
次のサンプルで確認してみてください。

#include<stdio.h>
int main() {
    char mojiretsu[5] = { 'H','e','l','l','o'};
    printf("文字列は %s です\n", mojiretsu);
}

※これを実行すると私の環境では「文字列は Helloフフフフフフフ・D侒 です」と表示されました。

printf関数はEOSをみて文字の終わりを判断するので、
EOSが無いとこうなっちゃうんですね。

因みに、配列の要素数が6のときに「\0」を省略した場合、
空いている部分が「\0」で穴埋めされるので正しく表示されます。

文字列の代入はダブルクォーテーション(””)囲んでもOK

文字列をダブルクォーテーションで囲んで代入することも可能です。
おそらくはこちらの方が使いやすいと思います。

#include<stdio.h>
int main() {
    char mojiretsu[6] = "Hello";
    printf("文字列は %s です\n", mojiretsu);
}

この場合も、EOSが入るよう配列の要素数に気を付けてください。

まとめ

今回はchar型の変数について触れていきました。
簡単にまとめると以下のとおりです。
・char型には文字を代入できる。ただし1文字だけ。
・文字は文字コードで定義されているので、数値で表示することもできる。
・文字列はchar型の配列で持つことができる。
・EOS(終端文字)がないと表示した際に「フフフフ…」となるので注意。

次回は関数の作り方に触れていきます。

お疲れ様でした!

コメント

タイトルとURLをコピーしました