★文字と文字列(文字列1)★


「文字」の説明の最初に、文字は1文字のことを差し、’(シングルクォーテーション)で囲まれていると書きました。

さらに「文字列」は "(ダブルクォーテーション)で囲まれているとも書きました。

「文字」の説明をするまでは、「文字列」ばかり使っていましたが、ほとんど説明していませんでしたので、細かい説明を書いていきます。


「文字列」は文字の集まりのことで、英語では「character string」と書きます。

「string」単体で「文字列」を指すことも多いので覚えておいてください。

これまでは「文字列」を表示する際に、↓のようにプログラムを書きました。

<sample program 081-01>

#include <stdio.h>

int main(void)
{
    printf("文字列の表示\n");

    return 0;
}

<実行結果>

文字列の表示
続行するには何かキーを押してください・・・

数値などを表示する時は「%」記号を使って↓のように書きますね。

<sample program 081-02>

#include <stdio.h>

int main(void)
{
    printf("value = %d\n", 123);

    return 0;
}

<実行結果>

value = 123
続行するには何かキーを押してください・・・

よく見ると「"value = %d\n"」の部分は "(ダブルクォーテーション)で囲まれているため「文字列」ですよね。

で、,(コンマ)の後ろにある「数値」の123が、「文字列」の中の「%d」と書いてある場所に表示されています。

簡単に説明すると、printfは「文字列」を表示する命令(関数)です。

「数値」は表示出来ないため、一旦「文字列」に変換して表示を行います。

上の例で言うと、「"value = %d\n"」という文字列を「"value = 123\n"」に変換して表示しています。


「文字」の表示の時に、

<sample program 077-01>

#include <stdio.h>

int main(void)
{
    printf('A');

    return 0;
}

このプログラムはエラーで動かないと説明しましたが、printfは「文字列」を表示する命令(関数)ですから「文字」は表示出来ないのです。

↓のように "(ダブルクォーテーション)で囲んだ「文字列」であれば1文字しかなくても表示出来ます。

<sample program 077-02>

#include <stdio.h>

int main(void)
{
    printf("A");

    return 0;
}

<実行結果>

A続行するには何かキーを押してください・・・

「1文字でも文字列」という話は非常に重要です。

1文字の「文字」と1文字の「文字列」は異なります。


それでは、もう少し細かい部分について説明していきましょう。

プログラムを実行しながら進めていきます。

まずは「文字列」を入れる変数のことを考えます。

「文字」はchar型変数に入れることが出来ました。

「文字列」は「文字」の集合体ですから、char型の配列を使うことで変数に入れることが出来ます。

サンプルプログラムを書きます。

<sample program 081-03>

#include <stdio.h>

#define MAX_STRING 10

int main(void)
{
    char str[MAX_STRING];

    return 0;
}

配列ですので、#defineを使って最大文字数を定義しました。

最大文字数は10ですので「文字」が10個入れられそうです。

(↑これ大事です!この言葉覚えておいてください)

まだ何も「文字」が設定されていませんので、設定方法について説明します。


「文字列」は配列ですから、配列で出来たことは大体同じように出来ます。

逆に配列に出来ないものは「文字列」でも出来ません。

まず最初は初期値として「文字列」を設定しましょう。

<sample program 081-04>

#include <stdio.h>

#define MAX_STRING 10

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

    return 0;
}

配列名の「str」は「string」の略です。

配列の初期値は{ }を使って、データを1つずつコンマ区切りで入れていましたが、文字列は "(ダブルクォーテーション)で設定することが出来ます。

実行しても何も表示されませんので、表示するプログラムを追加します。

<sample program 081-05>

#include <stdio.h>

#define MAX_STRING 10

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

    printf(str);

    return 0;
}

<実行結果>

Hello続行するには何かキーを押してください・・・

「str」は「文字列」ですので、printfでそのまま表示することが出来ます。

改行が含まれていませんでしたので、初期値に改行を追加してみます。

<sample program 081-06>

#include <stdio.h>

#define MAX_STRING 10

int main(void)
{
    char str[MAX_STRING] = "Hello\n";

    printf(str);

    return 0;
}

<実行結果>

Hello
続行するには何かキーを押してください・・・

上手く改行出来ました。

が、データの中に改行が入っているのは好ましくありません。

改行は表示上の問題ですので、データとは関係無いものです。

そこで、新しい書き方を説明します。

<sample program 081-07>

#include <stdio.h>

#define MAX_STRING 10

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

    printf("%s\n", str);

    return 0;
}

<実行結果>

Hello
続行するには何かキーを押してください・・・

「文字列」を表示するため「%s」という記号を使います。

改行はprintfの文字列の中に書けますので、データから切り離すことが出来ました。


次は変数と同じように、宣言後の代入を試してみます。

int a;

a = 12;

このようなイメージです。

<sample program 081-08>

#include <stdio.h>

#define MAX_STRING 10

int main(void)
{
    char str[MAX_STRING];

    str = "Hello";

    printf("%s\n", str);

    return 0;
}

コンパイルでエラーが発生してしまい、実行することが出来ません。

エラー内容を見てみましょう。

  error C3863: 配列型 'char [10]' を割り当てることはできません。

何のことやら分かりませんが、ダメということは分かります。

「数値」の配列も宣言時に初期値を設定することは出来ますが、処理の中で↓のように代入することは出来ません。

int data[10];

data = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };

「文字列」と同様にコンパイルでエラーが発生します。


次回は、scanfで「文字列」を入力する方法を説明します。


次へ

戻る

目次へ