通常の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という訳です。
次回はその他の命令(関数)について説明します。