C言語

文字列の扱い方

前のページでは、文字変数の扱いについて学びました。
C言語は、文字列を扱う変数がないのですが、前のページで学んだ文字変数のchar型を並べれば、文字列になります。
C言語では、char型の配列にすることで、文字列を扱うことができます。

ただし、単なる配列ではなく、C言語では、文字列の最後に特殊な文字を記憶する必要があります。この文字を記憶しておくことで、文字列の最後がわかるようになっています。
文字列の最後を表す文字は、'¥0'(ヌル文字)になります。このヌル文字のことを終端記号、または、終端文字などと呼びます。
また、この'¥0'は、数値では、0 にあたります。

変数配列に文字列を代入して表示するサンプルプログラムを次に示します。

#include <stdio.h>

int main(void)
{
    char str[] = { 'H', 'e', 'l', 'l', 'o', '!', '¥0' };

    printf("%s", str);

    return 0;
}

ここで、はじめて登場する出力変換指定子があります。%s 指定子です。
%s は、文字列を表示するための出力変換指定子です。
文字の場合は、%c を使っていましたが、文字列の場合は、%s を使用しますので注意する必要があります。

実行結果は、次のようになります。

実行結果

Hello!

先ほどのサンプルプログラムでは、5行目の変数の初期化で、最後に、'¥0'を入力していましたが、'¥0'は数値の 0 ということを利用して、次のように'¥0'を省略しても問題ありません。

char str[7] = { 'H', 'e', 'l', 'l', 'o', '!' };

複数の値をまとめて扱う配列の使い方」で、配列の宣言時の初期化では、配列の要素数より少ない場合、残りにはすべて0が代入されるということを学びました。
これを利用して、要素数を、初期値より1つ多い値にすることにより、初期値を設定しなかった配列の値には、0 が入りますので、結果として、'¥0'が代入されたことになります。
このため、省略しても問題ないことになります。

次は、" " で囲んだ文字列を代入する方法を学びます。

文字列リテラル

今まで、printf関数で、文字列を表示するときに、" " で囲んで記述してきました。
" "で囲んだ文字列のことを 文字列リテラルと呼びます。
この文字列リテラルは、char型の配列の初期化で代入することができます。

先ほどのサンプルプログラムの5行目の変数宣言の初期化を変更したサンプルプログラムを次に示します。

#include <stdio.h>

int main(void)
{
    char str[] = "Hello!";

    printf("%s", str);

    return 0;
}

このように、" " で囲んだ中に文字列を書くのみのため、簡単に文字列の初期化ができます。
文字列リテラルを使用する場合は、{ }は必要はありません。
また、" " 囲んだ文字列を代入するときは、'¥0'は、自動で代入されます。
このため、”Hello!”は、6文字ですが、要素数は7になります。
今回は、要素数を省略していますが、要素数を付けて文字列リテラルを代入するときは、'¥0'の分を確保することを忘れがちになるので、注意が必要です。

文字列リテラルを用いて代入するのは、宣言時の初期化のみです。変数宣言後で、文字列リテラルを用いて代入することはできません。
この場合は、不便ですが、1文字ずつ代入して記述します。

文字列の扱い方については、以上になります。

次は、変数の型について学びます。

変数の型と数値の種類

-C言語