Cライブラリ関数 -sscanf()

C標準ライブラリ - <stdio.h>

説明

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)
type1つの文字で、読み取られるデータ型とデータの読み取り方法を指定します。具体的には次の表を参照してください。

sscanf 型指定子:

型適合する入力引数の型
c単一文字:次の文字を読み取ります。1ではない幅 width が指定された場合、関数は width 個の文字を読み取り、引数を介して配列の連続した位置に格納します。末尾にヌル文字は追加されません。char *
d10進整数:数値の前の + または - 記号はオプションです。int *
e,E,f,g,G浮動小数点数:小数点、オプションの前置符号 + または -、オプションの後置文字 e または E、および10進数字を含みます。有効な例として -732.103 や 7.12e4 があります。float *
o8進整数。int *
s文字列。空白文字(空白、改行、タブなど)に遭遇するまで連続した文字を読み取ります。char *
u符号なし10進整数。unsigned int *
x,X16進整数。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);
}

上記のプログラムをコンパイルして実行すると、以下の結果が得られます:

March 25, 1989 = Saturday

C標準ライブラリ - <stdio.h>

その他の拡張