サイトマップ / C言語講座>出入り口>総目次>目次:関数>sscanf( )とsprintf( )
/* 今日は、標準ライブラリ関数、sscanf( )とsprintf( )の使い方を学びます。sscanf( )は既に学んでいますが復習します。
sscanf( )はscanf( )のグループに属します。scanf( )は標準入力(キーボード)から、fscanf( )はファイルから、sscanf( )は文字列から、書式文字列に従って入力の内容を変換し、結果を引数に入れます。変換に成功した引数の数を返します。
#include <stdio.h> int sscanf(const char *str, const char *format, ...); 例:n = sscanf(str, format, ...); 実行結果 戻り値 成功 値を入力、代入した引数の数 失敗 EOF
sscanf( )の最初の引数は値を読み込む文字列です。次の引数は書式文字列です。書式文字列中の書式指定子については、書式付き入力と書式指定子をご覧下さい。最後に、データをしまう可変個の引数の並びがあります。引数はポインタでなければなりません。書式指定子の変換仕様と引数は、型、個数共に、一致していなければなりません。書式文字列中のスペースは読み飛ばされます。
sprintf( )は、printf( )のグループに属します。printf( )は標準出力(画面)に、fprintf( )はファイルに、sprintf( )は文字列に、書式文字列に従って引数の内容を出力します。出力した文字の数を返します。
#include <stdio.h> int sprintf(char *s, const char *format, ...); 例:n = sprintf(s, format, ...); 実行結果 戻り値 成功 出力した文字の数 失敗 EOF
sprintf( )の最初の引数は値を書き込む文字列です。次の引数は書式文字列です。書式文字列中の書式指定子については、書式付き出力と書式指定子をご覧下さい。最後にデータを読み込む可変個の引数の並びがあります。
ソースプログラムを見ていきます。今回は、sscanf( )で文字列から書式文字列に従って内容を変換し、結果を引数に入れます。下記に示すのは sscanf( )の最初の引数として使う文字列です。
const char *str = "pai = 3.1415";
" " の中をよく見ると文字列の途中に2つのスペースがあります。つまり、" "の中には、3つのデータがあることになります。
sscanf( )の残りの引数を下記に示します。
"%s%s%lf", buff1, buff2, &pai
3つのデータを2つの文字列と、1つの double型の浮動小数点数に変換してbuff1, buff2, &paiにしまいます。これらの引数はメインルーチンの中で、下記に示すように宣言されています。
char buff1[256]; char buff2[256]; double pai;
これらはポインタです。配列の名前はポインタになります。上記の文字列の大きさは充分大きく取ってあります。sscanf( )とsprintf( )で、メモリが不足するとプログラムが暴走する恐れがあります。次いで、上記の引数に入ったデータをprintf( )で表示します。最後に、逆の処理をsprintf( )で行います。
sprintf( )の最初の引数は値を書き込む文字列です。メインルーチンの中で、下記に示すように宣言されています。
char buff3[256];
sprintf( )は buff1, buff2, paiに入っているデータを、buff3[ ]に書き込みます。ソースプログラムでは、最後にbuff3[ ]に書き込まれた内容を、printf( )で表示しています。 */
#include <stdio.h> void main(void); void main(void) { char buff1[256]; /* sscanf( ) の変換結果をしまう */ char buff2[256]; /* sscanf( ) の変換結果をしまう */ double pai; /* sscanf( ) の変換結果をしまう */ int n; /* sscanf( ) で入力に成功した変数の数をしまう */ char buff3[256]; /* sprintf( ) の出力をしまう */ const char *str = "pai = 3.1415"; /* sscanf( ) の最初の引数 */ /* 上の行を表示 */ printf("const char *str = \"pai = 3.1415\";\n"); /* 下の行を表示 */ printf("n = sscanf(str, \"%%s%%s%%lf\", buff1, buff2, &pai);\n"); n = sscanf(str, "%s%s%lf", buff1, buff2, &pai); /* 文字列から変換 */ printf("%d つの変数が sscanf( ) によって変換されました。\n\n", n); /* 下の行を表示 */ printf("printf(\"%%s %%s %%7.4lf\\n\\n\", buff1, buff2, pai);\n"); printf("%s %s %7.4lf\n\n", buff1, buff2, pai); /* 下の行を表示 */ printf("sprintf(buff3, \"%%s %%s %%7.4lf\\n\", buff1, buff2, pai);\n"); sprintf(buff3, "%s %s %7.4lf\n", buff1, buff2, pai); /* 文字列へ変換 */ /* 下の行を表示 */ printf("printf(\"buff3: %%s\\n\", buff3);\n"); printf("buff3: %s\n", buff3); /* 変換結果を表示 */ } |
/* 幾つかのprintf( )は、Cのソースコードを表示するのに使われています。その書式文字列の中の以下の記述は以下の文字を表示するのに使います。
'%%' : '%' を表示 '\"' : '"' を表示 '\\' : '\' を表示
*/
/* (C) 2000- YFプロ. All Rights Reserved. */ 提供:C言語講座−それ自体コンパイルできる教材を使った講座です−