sscanf,swscanf

提供: RAD Studio
移動先: 案内検索

stdio.h:インデックス への移動


ヘッダーファイル

stdio.h

カテゴリ

メモリと文字列の操作ルーチン

構文

int sscanf(const char *buffer, const char *format[, address, ...]);

int swscanf(const wchar_t *buffer, const wchar_t *format[, address, ...]);

説明

文字列からの入力をスキャンして書式設定します。

メモ:  書式指定子の詳細は,scanf を参照してください。

sscanf は,文字列から読み取った一連の入力フィールドを 1 文字ずつスキャンします。各フィールドは,format が指す書式文字列で sscanf に渡された書式指定子にしたがって書式設定されます。最後に sscanf は,format に続く引数として渡されたアドレスに,書式設定した入力を格納します。入力フィールドと同じ数の書式指定子とアドレスが必要です。

sscanf は,通常のフィールド終了文字(ホワイトスペース)に到達する前に,特定のフィールドのスキャンを停止する場合があります。または,さまざまな原因で完全に処理を終了する場合もあります。考えられる理由については,...scanf を参照してください。

戻り値

成功した場合,sscanf は,スキャン,変換,および格納に成功した入力フィールドの数を返します。この戻り値には,スキャンされたが格納されなかったフィールドは含まれません。

文字列の終わりを読み取ろうとした場合,sscanf は EOF を返します。

エラーの場合(フィールドが格納されなかった場合)は,0 を返します。

メモ: sscanf は,2 バイト文字へのポインタが渡されたことを示す大文字の「s」または「ls」を必要とせず,「s」指定子が 2 バイト文字(wchar_t)を参照するとみなします。


#include <stdio.h>
#include <stdlib.h>
char *names[4] = {"Peter", "Mike", "Shea", "Jerry"};
#define NUMITEMS 4
int main(void)
{
   int   loop;
   char  temp[4][80];
   char  name[20];
   int   age;
   long  salary;
/* 名前,年齢,および給与データを作成します */
   for (loop=0; loop < NUMITEMS; ++loop)
      sprintf(temp[loop], "%s %d %ld", names[loop], random(10) + 20, random(5000) + 27500L);
/* タイトルバーを出力します */
   printf("%4s | %-20s | %5s | %15s\n", "#", "Name", "Age", "Salary");
   printf("   --------------------------------------------------\n");
/* 名前,年齢,および給与データを入力します */
   for (loop=0; loop < NUMITEMS; ++loop)
      {
      sscanf(temp[loop],"%s %d %ld", &name, &age, &salary);
      printf("%4d | %-20s | %5d | %15ld\n", loop + 1, name, age, salary);
      }
   return 0;
}


移植性

POSIX Win32 ANSI C ANSI C++

sscanf

+

+

+

+

swscanf

+

+

+

関連項目