【独学C言語】文字列と配列

※この記事は「2020年12月17日」に更新しました。

今回は、文字列についてです。

前回は、2次元配列について、解説しました。

2次元配列

【独学C言語】2次元配列

2020年4月22日

C言語に文字列型というデータ型は存在しません。

文字型の配列を使って表現します。

文字列と配列

文字列と配列について。

文字と文字列

まずは、文字を扱うデータ型を紹介します。

以下は文字型の変数宣言です。

char 変数名;

char(キャラ)型といいます。

ちなみに代入するときは以下のようにします。

変数名 = '文字';

シングルクォーテーションで囲むことで文字を表しています。

次に文字列を表現してみます。

以下は文字列の変数宣言です。

char 配列名[文字列のサイズ];

ちなみに 3文字の文字列を格納するためには、4つの要素を持つ配列が必要です。

理由は、文字列の最後に \0 という文字が必ず格納されるからです。

これは、文字列の最後を表す値で、ヌル(NULL)、エンゼロ などと呼ばれています。

従って、宣言時に初期化を行う場合、以下のように記述します。

char msg[5] = "last";

ダブルクォーテーションで囲むことで文字列を表しています。

これは、以下のように一つずつ代入しても構いません。

msg[0] = 'l';
msg[1] = 'a';
msg[2] = 's';
msg[3] = 't';
msg[4] = '\0';

サンプルプログラム【C言語】

文字列と配列を理解するためのサンプルプログラムです。

sample.c というソースファイルを作成します。

#include <stdio.h>

int main(void)
{
    char msg[5] = "last";

    printf("\n");

    printf("The message is %s.\n", &msg[0]);

    printf("\n");

    return 0;
}

通常、配列に格納する値をまとめて扱うことはできませんが、文字列の場合に限り、まとめて出力させることができます。

printf関数でフォーマット指定子に %s を設定します。

実行結果は以下の通りです。

文字列と配列

次に sample2.c というソースファイルを作成します。

#include <stdio.h>

#define BUF 256

int main(void)
{
    char str[BUF];
    int cnt;

    printf("\n");

    printf("Input string : ")
    scanf("%s", &str[0]);

    for(cnt = 0; str[cnt] != '\0'; cnt++);

    printf("\n");

    printf("Input string : %s", &str[0]);
    printf("\n");
    printf("The length of string : %d", cnt);

    printf("\n");

    return 0;
}

まず、#define で BUF というマクロ名を定義しています。

これは、255文字まで文字列を入力することを想定しています(256文字以上入力しないようにして下さい)。

文字列を入力してもらいます。

for文で \0(文字列の最後)が格納されているところまで cnt をインクリメントし続けます。

その後、入力した文字列と文字数を出力しています。

実行結果は以下の通りです。

文字列と配列

独学C言語の記事について【おまけ】

タカフミブログの独学C言語シリーズは、C言語を独学するということを目的に記事を書いています。

他の記事に興味がある方は以下をご参照下さい。

C言語に関する記事一覧

C言語は、古典的なイメージがある方もいるかもしれませんが、他の多くのプログラミング言語のベースになっています。

実際に本格的なソフトを開発するとなるとなかなか大変ですが、とにかくハードウェアのリソースが少なくても高速に動くのが最大のメリットです。

プログラマーや SE(システムエンジニア)を目指す方は一度お試し下さい。

最後に【文字列と配列】

いかがでしょうか。

文字列と配列について紹介しました。

次回は、関数について、解説していきます。

【独学C言語】関数とは

【独学C言語】関数とは

2020年4月27日

今回紹介しませんでしたが、C言語には、文字列を扱う関数が標準ライブラリに用意されています。

string.h というヘッダファイルをインクルードすることで使うことができます。

興味のある方は一度使ってみてください。