sscanf、_sscanf_l、swscanf、_swscanf_lsscanf, _sscanf_l, swscanf, _swscanf_l

文字列から書式付きデータを読み出します。Read formatted data from a string. これらの関数のセキュリティを強化したバージョンを使用できます。「sscanf_s、_sscanf_s_l、swscanf_s、_swscanf_s_l」をご覧ください。More secure versions of these functions are available; see sscanf_s, _sscanf_s_l, swscanf_s, _swscanf_s_l.

構文Syntax

int sscanf(
   const char *buffer,
   const char *format [,
   argument ] ...
);
int _sscanf_l(
   const char *buffer,
   const char *format,
   locale_t locale [,
   argument ] ...
);
int swscanf(
   const wchar_t *buffer,
   const wchar_t *format [,
   argument ] ...
);
int _swscanf_l(
   const wchar_t *buffer,
   const wchar_t *format,
   locale_t locale [,
   argument ] ...
);

パラメーターParameters

バッファーbuffer
格納されるデータ。Stored data

formatformat
書式指定文字列。Format-control string. 詳細については、「 printf 関数と wprintf 関数の書式指定フィールド」を参照してください。For more information, see Format Specifications.

argumentargument
省略可能な引数。Optional arguments

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

戻り値Return Value

これらの関数は、正常に変換および代入されたフィールドの数を返します。読み込まれただけで代入されなかったフィールドは戻り値には含まれません。Each of these functions 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. エラーの場合、または最初の変換の前に文字列の末尾に到達した場合、戻り値はEOFになります。The return value is EOF for an error or if the end of the string is reached before the first conversion.

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

Sscanf関数は、各引数によって指定された場所にバッファーからデータを読み取ります。The sscanf function reads data from buffer into the location given by each argument. すべての引数は、形式の型指定子に対応する型を持つ変数へのポインターである必要があります。Every argument must be a pointer to a variable with a type that corresponds to a type specifier in format. Format引数は、入力フィールドの解釈を制御し、 scanf関数のformat引数と同じ形式と機能を持ちます。The format argument controls the interpretation of the input fields and has the same form and function as the format argument for the scanf function. 重なり合う文字列間でコピーした場合の動作は未定義です。If copying takes place between strings that overlap, the behavior is undefined.

Scanf 関数の型フィールド文字の詳細については、「scanf 関数の型フィールド文字」を参照してください。For information about scanf type field characters, see scanf Type Field Characters. Scanf 書式指定フィールドの詳細については、「書式指定フィールド」を参照してください。For information about scanf format specification fields, see Format Specification Fields.

重要

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

swscanfsscanfのワイド文字バージョンです。swscanfの引数はワイド文字列です。swscanf is a wide-character version of sscanf; the arguments to swscanf are wide-character strings. sscanfでは、マルチバイトの16進文字は処理されません。sscanf does not handle multibyte hexadecimal characters. swscanfは、Unicode の全角16進数または "互換ゾーン" の文字を処理しません。swscanf does not handle Unicode full-width hexadecimal or "compatibility zone" characters. それ以外の場合、 swscanfsscanfは同じように動作します。Otherwise, swscanf and sscanf behave identically.

_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
stscanf_stscanf sscanfsscanf sscanfsscanf swscanfswscanf
stscanf_l (_d)_stscanf_l _sscanf_l_sscanf_l _sscanf_l_sscanf_l _swscanf_l_swscanf_l

必要条件Requirements

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

互換性の詳細については、「 互換性」を参照してください。For additional compatibility information, see Compatibility.

Example

// crt_sscanf.c
// compile with: /W3
// This program uses sscanf to read data items
// from a string named tokenstring, then displays them.

#include <stdio.h>

int main( void )
{
   char  tokenstring[] = "15 12 14...";
   char  s[81];
   char  c;
   int   i;
   float fp;

   // Input various data from tokenstring:
   // max 80 character string:
   sscanf( tokenstring, "%80s", s ); // C4996
   sscanf( tokenstring, "%c", &c );  // C4996
   sscanf( tokenstring, "%d", &i );  // C4996
   sscanf( tokenstring, "%f", &fp ); // C4996
   // Note: sscanf is deprecated; consider using sscanf_s instead

   // Output the data read
   printf( "String    = %s\n", s );
   printf( "Character = %c\n", c );
   printf( "Integer:  = %d\n", i );
   printf( "Real:     = %f\n", fp );
}
String    = 15
Character = 1
Integer:  = 15
Real:     = 15.000000

関連項目See also

ストリーム入出力Stream I/O
fscanf、_fscanf_l、fwscanf、_fwscanf_lfscanf, _fscanf_l, fwscanf, _fwscanf_l
scanf、_scanf_l、wscanf、_wscanf_lscanf, _scanf_l, wscanf, _wscanf_l
sprintf、_sprintf_l、swprintf、_swprintf_l、__swprintf_lsprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l
snprintf、_snprintf、_snprintf_l、_snwprintf、_snwprintf_lsnprintf, _snprintf, _snprintf_l, _snwprintf, _snwprintf_l