Cライブラリ関数 -sscanf()
説明
Cライブラリ関数int sscanf(const char *str, const char *format, ...)文字列からフォーマット済み入力を読み取ります。
宣言
以下は sscanf() 関数の宣言です。
int sscanf(const char *str, const char *format, ...)
パラメータ
- str-- これはC文字列で、関数がデータを取得するソースです。
- format-- これはC文字列で、以下の中の1つ以上を含みます:空白文字、非空白文字とformat 指定子。
format 指定子の形式は[=%[*][width][modifiers]type=]、具体的には次のとおりです:
| パラメータ | 説明 |
|---|---|
| * | これはオプションのアスタリスクで、データがストリーム stream から読み取られることを示しますが、無視することができます。つまり、対応するパラメータに格納されません。 |
| width | これは、現在の読み取り操作で読み取る最大文字数を指定します。 |
| modifiers | 対応する追加パラメータが指すデータに対して、整数型(d、i、n)、符号なし整数型(o、u、x)、または浮動小数点型(e、f、g)とは異なるサイズを指定します: h :短整数型(d、i、n)、または符号なし短整数型(o、u、x) l :長整数型(d、i、n)、または符号なし長整数型(o、u、x)、または double 型(e、f、g) L :long double 型(e、f、g) |
| type | 1つの文字で、読み取られるデータ型とデータの読み取り方法を指定します。具体的には次の表を参照してください。 |
sscanf 型指定子:
| 型 | 適合する入力 | 引数の型 |
|---|---|---|
| c | 単一文字:次の文字を読み取ります。1ではない幅 width が指定された場合、関数は width 個の文字を読み取り、引数を介して配列の連続した位置に格納します。末尾にヌル文字は追加されません。 | char * |
| d | 10進整数:数値の前の + または - 記号はオプションです。 | int * |
| e,E,f,g,G | 浮動小数点数:小数点、オプションの前置符号 + または -、オプションの後置文字 e または E、および10進数字を含みます。有効な例として -732.103 や 7.12e4 があります。 | float * |
| o | 8進整数。 | int * |
| s | 文字列。空白文字(空白、改行、タブなど)に遭遇するまで連続した文字を読み取ります。 | char * |
| u | 符号なし10進整数。 | unsigned int * |
| x,X | 16進整数。 | int * |
追加パラメータ-- この関数は、一連のポインタを追加パラメータとして受け取ります。各ポインタはオブジェクトを指し、オブジェクトの型は format 文字列内の対応する % タグによって指定されます。パラメータは % タグと同じ順序です。
データを取得するための format 文字列内の各 format 指定子に対して、追加パラメータを指定する必要があります。sscanf 操作の結果を通常の変数に格納したい場合は、識別子の前に参照演算子(&)を置く必要があります。例:
int n; sscanf (str,"%d",&n);
戻り値
成功した場合、この関数は正常にマッチして代入された数を返します。ファイルの末尾に達した場合、または読み取りエラーが発生した場合は EOF を返します。
例
以下の例は sscanf() 関数の使い方を示しています。
例
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int day, year;
char weekday[20], month[20], dtm[100];
strcpy( dtm, "Saturday March 25 1989" );
sscanf( dtm, "%s %s %d %d", weekday, month, &day, &year );
printf("%s %d, %d = %s\n", month, day, year, weekday );
return(0);
}
#include <stdlib.h>
#include <string.h>
int main()
{
int day, year;
char weekday[20], month[20], dtm[100];
strcpy( dtm, "Saturday March 25 1989" );
sscanf( dtm, "%s %s %d %d", weekday, month, &day, &year );
printf("%s %d, %d = %s\n", month, day, year, weekday );
return(0);
}
上記のプログラムをコンパイルして実行すると、以下の結果が得られます:
March 25, 1989 = Saturdayその他の拡張