★文字と文字列(文字列7)★


通常のprintfは標準出力(主にディスプレイ)に文字列を表示する命令(関数)です。

sprintfは「文字列用配列」に文字列を表示(代入)する命令(関数)です。

書式を使って色々と指定出来ますので、strcpy、strcatよりもずっと便利に使えます。

とりあえずサンプルを実行してみてください。


<sample program 087-01>

#include <stdio.h>

#define MAX_STRING 10

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

    sprintf(str, "Hello");

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

    return 0;
}

<実行結果>

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

これは"Hello"という文字列を配列strにコピーするプログラムです。

strcpyと同じ要領で使えます。

この時点で差異は余りないですね。

※strcpyなどと同じく安全でないという警告も出ています。


上のサンプルの形を少し変えてみます。

<sample program 087-02>

#include <stdio.h>

#define MAX_STRING 10

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

    sprintf(str, "%s", "Hello");

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

    return 0;
}

<実行結果>

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

実行結果は同じですが、このサンプルでは書式を使ってみました。

printfと書式は同じなので「%s」や「%d」なども使えます。

ということは、「文字列」だけでなく「数値」も扱うことが出来るということです。


<sample program 087-03>

#include <stdio.h>

#define MAX_STRING 10

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

    int value = 10;

    sprintf(str, "%d", value);

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

    return 0;
}

<実行結果>

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

int型に入っている「数値」の10を「文字列」strに「文字」として代入しました。

printfは書式通りに「数値」などの情報を「文字」に変換してくれますので、sprintfでも同じことが出来るのです。

printfは結果をディスプレイに、sprintfは結果を文字列に、という違いだけです。

これらを組み合わせると↓のようなことも出来ます。

<sample program 087-04>

#include <stdio.h>

#define MAX_MESSAGE 100

#define MAX_NAME 10

int main(void)
{
    char message[MAX_MESSAGE];

    char name[MAX_NAME];

    int damage;

    printf("名前を入力(全角4文字まで)\n");

    scanf("%s", name);

    damage = 10;

    sprintf(message, "%sは%dのダメージを受けた!", name, damage);

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

    return 0;
}

<実行結果>

名前を入力(全角4文字まで)
匿名
匿名は10のダメージを受けた!
続行するには何かキーを押してください・・・

現在の環境はコンソールアプリケーションですので、文字ベースの環境(CUI)です。

※CUI:Character User Interface

このような環境であれば↑のプログラムの最後の部分は、

sprintf(message, "%sは%dのダメージを受けた!", name, damage);

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

ではなく、

printf("%sは%dのダメージを受けた!\n", name, damage);

でも同じ結果になります。

しかし、WindowsアプリケーションなどのGUI環境ではprintfなどの書式付の文字表示命令(関数)がありません

※GUI:Graphical User Interface

書式が無いため、文字列しか表示出来ないことが多いです。

そのため、sprintfで全て文字列に変換しておいて表示するという方法を取ります。

その際に活躍してくれるのがsprintfという訳です。


次回はその他の命令(関数)について説明します。


次へ

戻る

目次へ