sscanf,swscanf
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 |
+ |
+ |
+ |