次の情報は、 scanf など、安全なバージョンを含む scanf_s関数ファミリのいずれかに適用されます。
type 文字だけが必須の書式フィールドであり、任意の省略可能な書式フィールドをその後に続けて指定します。 type 文字は、関連付けられた引数が、文字、文字列、または数として解釈されるかどうかを決定します。
scanf 関数の type 文字
| 文字 | 必要な入力の型 | 引数の型 | 安全なバージョンのサイズ引数ですか。 |
|---|---|---|---|
c |
文字です。 scanf 関数で使用する場合は 1 バイト文字を指定し、 wscanf 関数で使用する場合はワイド文字を指定します。 空白文字は通常はスキップされますが、 c が指定されている場合は読み取られます。 他の型フィールドとは異なり、フィールド幅指定子は、最大ではなく正確な文字数を示します。 次の空白以外の 1 バイト文字を読み取るには %1s を使用し、次の空白以外のワイド文字を読み取るには %1ws を使用します。 |
char へのポインターは scanf 関数で使用され、 wchar_t へのポインターは wscanf 関数で使用されます。 |
必須。 サイズには、null ターミネータのスペースは含まれません。 |
C |
反対のサイズ文字です。 scanf 関数で使用する場合はワイド文字を指定し、 wscanf 関数で使用する場合は 1 バイト文字を指定します。 空白文字は通常はスキップされますが、 C が指定されている場合は読み取られます。 他の型フィールドとは異なり、フィールド幅指定子は、最大ではなく正確な文字数を示します。 次の空白以外の 1 バイト文字を読み取るには %1s を使用し、次の空白以外のワイド文字を読み取るには %1ws を使用します。 |
wchar_t へのポインターは scanf 関数で使用され、 char へのポインターは wscanf 関数で使用されます。 |
必須。 Size 引数には、null ターミネータのスペースは含まれません。 |
d |
10 進整数です。 | intへのポインターです。 |
いいえ。 |
i |
整数。 入力文字列が "0x" または "0X" で始まる場合は 16 進数、文字列が "0" で始まる場合は 8 進数、それ以外の場合は 10 進数です。 | intへのポインターです。 |
いいえ。 |
o |
8 進数です。 | intへのポインターです。 |
いいえ。 |
p |
16 進数のポインター アドレス。 読み取る最大桁数は、ポインターのサイズ (32 ビットまたは 64 ビット) によって異なります。これは、コンピューターのアーキテクチャによって異なります。 "0x" または "0X" はプレフィックスとして受け入れられます。 | void*へのポインターです。 |
いいえ。 |
u |
符号なし 10 進整数。 | unsigned intへのポインターです。 |
いいえ。 |
x |
16 進整数です。 | intへのポインターです。 |
いいえ。 |
e、 E、 f、 F、 g、 G |
次の順序で構成される浮動小数点の値です。省略可能な符号 (+ または -)、小数点のある一連の 10 進数、省略可能な指数 ("e" または "E") とそれに続く省略可能な符号付き整数値。 | floatへのポインターです。 |
いいえ。 |
a, A |
次の順序で構成される浮動小数点の値です。小数点 (省略可能) のある一連の 16 進数、指数 ("p" または "P") とそれに続く 10 進数の値。 | floatへのポインターです。 |
いいえ。 |
n |
ストリームまたはバッファーからの入力は読み取られません。 | intへのポインターであり、そこには scanf 関数または wscanf 関数への呼出しまでストリームまたはバッファーから読み取られた文字数が格納されます。 |
いいえ。 |
s |
最初の空白文字 (スペース、タブ、または改行) までの文字列。 スペースで区切られていない文字列を読み取るには、「scanf での幅指定」で説明したように、角かっこのセット ([ ]) を使用します。 |
scanf 関数で使用する場合は 1 バイト文字配列を意味し、 wscanf 関数で使用する場合はワイド文字配列を意味します。 どちらの場合も、文字配列は入力フィールドと自動的に追加される終端の null 文字に十分な大きさにする必要があります。 |
必須。 サイズには null 終端文字のスペースが含まれます。 |
S |
最初の空白文字 (スペース、タブ、または改行) までの反対のサイズ文字列。 スペースで区切られていない文字列を読み取るには、「scanf での幅指定」で説明したように、角かっこのセット ([ ]) を使用します。 |
scanf 関数で使用する場合はワイド文字配列を意味し、wscanf 関数で使用する場合は 1 バイト文字配列を意味します。 どちらの場合も、文字配列は入力フィールドと自動的に追加される終端の null 文字に十分な大きさにする必要があります。 |
必須。 サイズには null 終端文字のスペースが含まれます。 |
必要に応じて、size 引数をパラメーター リストで、適用される引数の直後に渡す必要があります。 コード例を次に示します。
char string1[11], string2[9];
scanf_s("%10s %8s", string1, 11, string2, 9);
10 文字までの文字列を string1で読み取り、8 文字までの文字列を string2で読み取ります。 バッファー サイズは、null 終端文字用にスペースが予約されるため、幅指定より 1 つ以上大きくする必要があります。
書式指定文字列は、1 バイト文字とワイド文字のどちらの関数バージョンが使用されているかに関係なく、1 バイト文字またはワイド文字の入力を処理できます。 したがって、 scanf 関数と wscanf 関数で 1 バイト文字とワイド文字を読み取るには、次のように書式指定子を使用します。
| 文字を次のように読み取る場合 | 使用する関数 | 書式指定子は次のとおりです。 |
|---|---|---|
| 1 バイト | scanf 関数 |
c、 hc、または hC |
| 1 バイト | wscanf 関数 |
C、 hc、または hC |
| ワイド | wscanf 関数 |
c、 lc、または lC |
| ワイド | scanf 関数 |
C、 lc、または lC |
scanf 関数と wscanf 関数で文字列をスキャンするには、型指定子 s と S ではなく、 c と Cで上記の表を使用します。