scanf、_scanf_l、wscanf、_wscanf_lscanf, _scanf_l, wscanf, _wscanf_l

標準入力ストリームから書式付きデータを読み取ります。Reads formatted data from the standard input stream. これらの関数のセキュリティを強化したバージョンを使用できます。「scanf_s、_scanf_s_l、wscanf_s、_wscanf_s_l」をご覧ください。More secure versions of these function are available; see scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l.

注意

Visual Studio 2015 では、printf および scanf の関数ファミリがinlineとして宣言され、<stdio.h><conio.h> のヘッダーに移動されました。In Visual Studio 2015 The printf and scanf family of functions were declared as inline and moved to the <stdio.h> and <conio.h> headers. 古いコードを移行する場合、これらの関数との接続にLNK2019が表示されることがあります。If you are migrating older code you might see LNK2019 in connection with these functions. 詳細については、「ビジュアルC++の変更履歴 2003-2015」を参照してください。For more information, see Visual C++ change history 2003 - 2015.

構文Syntax

int scanf(
   const char *format [,
   argument]...
);
int _scanf_l(
   const char *format,
   locale_t locale [,
   argument]...
);
int wscanf(
   const wchar_t *format [,
   argument]...
);
int _wscanf_l(
   const wchar_t *format,
   locale_t locale [,
   argument]...
);

パラメーターParameters

formatformat
書式指定文字列。Format control string.

argumentargument
省略可能な引数。Optional arguments.

localelocale
使用するロケール。The locale to use.

戻り値Return Value

正常に変換され、代入されたフィールドの数を返します。この数には、読み取られても代入されなかったフィールドは含まれません。Returns the number of fields successfully converted and assigned; the return value does not include fields that were read but not assigned. 戻り値が 0 の場合は、代入されたフィールドがなかったことを示します。A return value of 0 indicates that no fields were assigned.

FormatNULLポインターの場合は、「パラメーターの検証」で説明されているように、無効なパラメーターハンドラーが呼び出されます。If format is a NULL pointer, the invalid parameter handler is invoked, as described in Parameter Validation. 実行の継続が許可された場合、これらの関数はEOFを返し、 errnoEINVALに設定します。If execution is allowed to continue, these functions return EOF and set errno to EINVAL.

これらと他のエラー コードの詳細については、「_doserrno、errno、_sys_errlist、および _sys_nerr」を参照してください。For information on these and other error codes, see _doserrno, errno, _sys_errlist, and _sys_nerr.

RemarksRemarks

Scanf関数は、標準入力ストリームstdinからデータを読み取り、引数で指定された場所にデータを書き込みます。The scanf function reads data from the standard input stream stdin and writes the data into the location given by argument. 引数は、形式の型指定子に対応する型の変数へのポインターである必要があります。Each argument must be a pointer to a variable of a type that corresponds to a type specifier in format. 重なり合う文字列間でコピーした場合の動作は未定義です。If copying takes place between strings that overlap, the behavior is undefined.

重要

Scanfの文字列を読み取るときは、常に % s形式の幅を指定してください (たとえば、 "% s" ではなく "% 32s" )。そうしないと、正しくフォーマットされていない入力によってバッファーオーバーランが発生する可能性があります。When reading a string with scanf, always specify a width for the %s format (for example, "%32s" instead of "%s"); otherwise, improperly formatted input can easily cause a buffer overrun. 代わりに、scanf_s、_scanf_s_l、wscanf_s、_wscanf_s_l または fgets を使用することをご検討ください。Alternately, consider using scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l or fgets.

wscanfは、 scanfのワイド文字バージョンです。wscanfformat引数は、ワイド文字列です。wscanf is a wide-character version of scanf; the format argument to wscanf is a wide-character string. ストリームが ANSI モードで開かれている場合、 wscanfscanfは同じように動作します。wscanf and scanf behave identically if the stream is opened in ANSI mode. 現在、 scanfでは UNICODE ストリームからの入力はサポートされていません。scanf doesn't currently support input from a UNICODE stream.

_Lサフィックスを持つこれらの関数のバージョンは、現在のスレッドロケールの代わりに渡されたロケールパラメーターを使用する点を除いて同じです。The versions of these functions with the _l suffix are identical except that they use the locale parameter passed in instead of the current thread locale.

汎用テキスト ルーチンのマップGeneric-Text Routine Mappings

TCHAR.H のルーチンTCHAR.H routine _UNICODE および _MBCS が未定義の場合_UNICODE & _MBCS not defined _MBCS が定義されている場合_MBCS defined _UNICODE が定義されている場合_UNICODE defined
_tscanf_tscanf scanfscanf scanfscanf wscanfwscanf
_tscanf_l_tscanf_l _scanf_l_scanf_l _scanf_l_scanf_l _wscanf_l_wscanf_l

詳細については、「scanf 関数と wscanf 関数の書式指定フィールド」を参照してください。For more information, see Format Specification Fields — scanf functions and wscanf Functions.

[要件]Requirements

ルーチンによって返される値Routine 必須ヘッダーRequired header
scanfscanf_lscanf, _scanf_l <stdio.h><stdio.h>
wscanf_wscanf_lwscanf, _wscanf_l <stdio.h> または <wchar.h><stdio.h> or <wchar.h>

コンソールは、ユニバーサル Windows プラットフォーム (UWP) アプリではサポートされていません。The console is not supported in Universal Windows Platform (UWP) apps. コンソール、 stdinstdout、およびstderrに関連付けられている標準ストリームハンドルは、C ランタイム関数が UWP アプリで使用できるようになる前にリダイレクトする必要があります。The standard stream handles that are associated with the console, stdin, stdout, and stderr, must be redirected before C run-time functions can use them in UWP apps. 互換性の詳細については、「互換性」を参照してください。For additional compatibility information, see Compatibility.

Example

// crt_scanf.c
// compile with: /W3
// This program uses the scanf and wscanf functions
// to read formatted input.

#include <stdio.h>

int main( void )
{
   int   i, result;
   float fp;
   char  c, s[81];
   wchar_t wc, ws[81];
   result = scanf( "%d %f %c %C %80s %80S", &i, &fp, &c, &wc, s, ws ); // C4996
   // Note: scanf and wscanf are deprecated; consider using scanf_s and wscanf_s
   printf( "The number of fields input is %d\n", result );
   printf( "The contents are: %d %f %c %C %s %S\n", i, fp, c, wc, s, ws);
   result = wscanf( L"%d %f %hc %lc %80S %80ls", &i, &fp, &c, &wc, s, ws ); // C4996
   wprintf( L"The number of fields input is %d\n", result );
   wprintf( L"The contents are: %d %f %C %c %hs %s\n", i, fp, c, wc, s, ws);
}
71 98.6 h z Byte characters
36 92.3 y n Wide characters
The number of fields input is 6
The contents are: 71 98.599998 h z Byte characters
The number of fields input is 6
The contents are: 36 92.300003 y n Wide characters

関連項目See also

浮動小数点サポートFloating-Point Support
ストリーム入出力Stream I/O
ロケールLocale
fscanf、_fscanf_l、fwscanf、_fwscanf_lfscanf, _fscanf_l, fwscanf, _fwscanf_l
printf、_printf_l、wprintf、_wprintf_lprintf, _printf_l, wprintf, _wprintf_l
sprintf、_sprintf_l、swprintf、_swprintf_l、__swprintf_lsprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l
sscanf、_sscanf_l、swscanf、_swscanf_lsscanf, _sscanf_l, swscanf, _swscanf_l