文字列

C言語の定数の中でも、文字列リテラルは特殊なものでした。二重引用符 " で囲まれた文字列リテラルは、数値や文字などではなく、文字列を表す型も、文字列型の変数もありません。実は、C言語において文字列とは文字型charの配列なのです。文字列を変数に保存したり、編集を行うには、まず文字型の配列char []を用意して操作する必要があります。

通常、C言語で扱う文字列の終端には0が保存されています。これをNULL文字と呼び、繰り返し文などで文字列の終端を認識するために用いられます。文字列リテラルも、末尾には自動的にNULL文字が含まれています。よって、文字列を保存するための配列を用意する場合は、NULL 文字の領域を忘れないように注意してください。つまり、文字列"Kitty"は、6つの要素を持つ配列 { 'K', 'i', 't', 't', 'y', 0 }であると考えることができます。

K   i   t   t   y   0

文字型の配列は、単純な文字列リテラルで初期化することができます。例えば、次のように初期化できます。

char str[] = "Kitty on your lap";

この場合、str配列の先頭の要素から順に 'K'、'i'、't' というように、文字列リテラルの各文字が保存されます。文字列の末尾にはNULL文字を表す 0 が含まれるため、この文字配列の要素数は18となります。文字列リテラルで初期化した文字配列から、繰り返し文を使って文字単位で処理できます。

サンプル08

#include <stdio.h>

int main(void)
{
    char str[] = "Kitty on your lap";
    int i;

    for(i = 0 ; str[i] ; i++)
        printf("str[%d]=%c\n", i, str[i]);

    return 0;
}

実行結果

サンプル08の実行結果

サンプル08は、文字列リテラルで初期化した文字配列strの各要素の文字をfor文による繰り返し処理で出力しています。実行結果を見れば、配列の先頭の要素から順に、文字列の文字が並べられていることが確認できます。for文の終了条件には、単純に現在処理しているstr配列の要素を指定しています。これは、0で終わる文字列の特性を利用したもので、現在の処理している文字が0以外であれば、文字列が続いていると判断しています。処理が進み、配列の最後の要素str[17]に到達すると0が返されるのでfor文を終了します。

この性質を理解することで、文字列の変換や検索、解析などを行えます。簡単な複製や、文字列の結合などであれば、標準ライブラリの関数でもサポートされています。文字列に関連する処理を行うときはstrで始まる標準関数を探してください。