scanf_s 関数は、標準入力ストリーム stdin からデータを読み取り、そのデータを argument で指定されている位置に書き込みます。各 argument は、format の型指定子に対応する型の変数へのポインタにする必要があります。重なり合う文字列間でコピーした場合の動作は未定義です。
wscanf_s は scanf_s のワイド文字バージョンであり、wscanf_s の引数 format はワイド文字文字列です。ストリームが ANSI モードで開いている場合、wscanf_s と scanf_s の動作は同じです。現在 scanf_s では、UNICODE ストリームからの入力はサポートされていません。
これらの関数のうち _l サフィックスが付けられたバージョンは、現在のスレッド ロケールの代わりに渡されたロケール パラメータを使用する点を除いて同じです。
scanf および wscanf とは異なり、scanf_s および wscanf_s では、c、C、s、S、または [ の型のすべての入力パラメータに対してバッファ サイズを指定する必要があります。バッファ サイズは、バッファまたは変数のポインタの直後に追加パラメータとして渡されます。たとえば、文字列を読み込む場合、その文字列のバッファ サイズは次のように渡されます。
char s[10];
scanf("%9s", s, 10);
バッファ サイズには、終端 null も含まれます。読み取られたトークンがバッファに確実に収まるように、幅指定フィールドが使用される場合もあります。幅指定フィールドが使用されない場合で、読み込まれたトークンがバッファに収まらない場合、そのバッファには何も書き込まれません。
メモ : |
|---|
| サイズ パラメータは size_t 型ではなく、unsigned 型です。 |
文字の場合、次のように 1 文字読み込む場合もあります。
char c;
scanf("%c", &c, 1);
null で終わらない文字列に対して複数の文字列を読み込む場合、幅指定とバッファ サイズとして整数が使用されます。
char c[4];
scanf("%4c", &c, 4); // not null terminated
詳細については、「scanf 関数の文字幅指定」を参照してください。
汎用テキスト ルーチンのマップ
|
TCHAR.H のルーチン
|
_UNICODE および _MBCS が未定義の場合
|
_MBCS が定義されている場合
|
_UNICODE が定義されている場合
|
| _tscanf_s | scanf_s | scanf_s | wscanf_s |
| _tscanf_s_l | _scanf_s_l | _scanf_s_l | _wscanf_s_l |
詳細については、「scanf 関数と wscanf 関数の書式指定フィールド」を参照してください。