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 |
+ |
+ |
+ |