sscanf_s, _sscanf_s_l, swscanf_s, _swscanf_s_lsscanf_s, _sscanf_s_l, swscanf_s, _swscanf_s_l

문자열에서 형식이 지정된 데이터를 읽습니다.Reads formatted data from a string. 이러한 버전의 sscanf, _sscanf_l, swscanf, _swscanf_l에는 CRT의 보안 기능에 설명된 대로 향상된 보안 기능이 포함되어 있습니다.These versions of sscanf, _sscanf_l, swscanf, _swscanf_l have security enhancements, as described in Security Features in the CRT.

구문Syntax

int sscanf_s(
   const char *buffer,
   const char *format [,
   argument ] ...
);
int _sscanf_s_l(
   const char *buffer,
   const char *format,
   locale_t locale [,
   argument ] ...
);
int swscanf_s(
   const wchar_t *buffer,
   const wchar_t *format [,
   argument ] ...
);
int _swscanf_s_l(
   const wchar_t *buffer,
   const wchar_t *format,
   locale_t locale [,
   argument ] ...
);

매개 변수Parameters

bufferbuffer
저장된 데이터Stored data

formatformat
형식 컨트롤 문자열입니다.Format-control string. 자세한 내용은 서식 지정 필드: scanf 함수 및 wscanf 함수를 참조하세요.For more information, see Format Specification Fields: scanf and wscanf Functions.

argumentargument
선택적 인수Optional arguments

localelocale
사용할 로캘입니다.The locale to use

반환 값Return Value

이러한 각 함수는 모두 성공적으로 변환되고 할당된 필드 수를 반환합니다. 이때 읽혀졌지만 할당되지 않은 필드는 반환 값에 포함되지 않습니다.Each of these functions returns the number of fields that are 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.

하는 경우 버퍼 또는 형식 되는 NULL 에 설명 된 대로 포인터인 경우 잘못 된 매개 변수 처리기가 호출 매개 변수 유효성 검사합니다.If buffer or format is a NULL pointer, the invalid parameter handler is invoked, as described in Parameter Validation. 이러한 함수는 계속 실행 하도록 허용,-1을 반환 하 고 설정 errnoEINVALIf execution is allowed to continue, these functions return -1 and set errno to EINVAL

이 오류 및 다른 오류 코드에 대한 자세한 내용은 errno, _doserrno, _sys_errlist, 및 _sys_nerr을 참조하세요.For information about these and other error codes, see errno, _doserrno, _sys_errlist, and _sys_nerr.

설명Remarks

합니다 sscanf_s 함수에서 데이터를 읽는 버퍼 각각 사용 하 여 지정 된 위치로 인수합니다.The sscanf_s function reads data from buffer into the location that's given by each argument. 형식 지정자에 해당 하는 형식의 변수에 대 한 포인터를 지정 하는 형식 문자열 뒤의 인수 형식합니다.The arguments after the format string specify pointers to variables that have a type that corresponds to a type specifier in format. 덜 안전한 버전을 달리 sscanf, 버퍼 크기 매개 변수는 형식 필드 문자를 사용할 때 필요한 c, C, s, S, 또는 컨트롤 집합에 포함 된 문자열 [] 합니다.Unlike the less secure version sscanf, a buffer size parameter is required when you use the type field characters c, C, s, S, or string control sets that are enclosed in []. 문자의 버퍼 크기는 해당 크기를 필요로 하는 각 버퍼 매개 변수 바로 뒤에 추가 매개 변수로 제공해야 합니다.The buffer size in characters must be supplied as an additional parameter immediately after each buffer parameter that requires it. 예를 들어 문자열을 읽고 있는 경우 해당 문자열에 대한 버퍼 크기가 다음과 같이 전달됩니다.For example, if you are reading into a string, the buffer size for that string is passed as follows:

wchar_t ws[10];
swscanf_s(in_str, L"%9s", ws, (unsigned)_countof(ws)); // buffer size is 10, width specification is 9

버퍼 크기에는 종료 null이 포함되어 있습니다.The buffer size includes the terminating null. 너비 사양 필드를 사용하면 읽은 토큰이 버퍼에 맞는지 확인할 수 있습니다.A width specification field may be used to ensure that the token that's read in will fit into the buffer. 너비 지정 필드가 사용되지 않으며 읽은 토큰이 너무 커서 버퍼에 맞지 않는 경우 버퍼에는 아무것도 기록되지 않습니다.If no width specification field is used, and the token read in is too big to fit in the buffer, nothing is written to that buffer.

문자의 경우 다음과 같이 단일 문자를 읽을 수 있습니다.In the case of characters, a single character may be read as follows:

wchar_t wc;
swscanf_s(in_str, L"%c", &wc, 1);

이 예제에서는 입력 문자열에서 문자 하나를 읽은 다음 와이드 문자 버퍼에 저장합니다.This example reads a single character from the input string and then stores it in a wide-character buffer. null로 종료되지 않는 문자열의 여러 문자를 읽을 때는 너비 사양 및 버퍼 크기로 부호 없는 정수를 사용합니다.When you read multiple characters for non-null terminated strings, unsigned integers are used as the width specification and the buffer size.

char c[4];
sscanf_s(input, "%4c", &c, (unsigned)_countof(c)); // not null terminated

자세한 내용은 참조 scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_lscanf 형식 필드 문자를 참조하세요.For more information, see scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l and scanf Type Field Characters.

참고

크기 매개 변수는 형식 unsigned가 아닌 size_t합니다.The size parameter is of type unsigned, not size_t. 를 64 비트 대상에 대해 컴파일할 때 사용 하 여 정적 캐스트를 변환할 _countof 또는 sizeof 를 정확한 크기로 결과입니다.When compiling for 64-bit targets, use a static cast to convert _countof or sizeof results to the correct size.

형식 인수 해석을 제어 하는 입력 필드 동일한 폼 및 함수는 형식 에 대 한 인수를 scanf_s 함수.The format argument controls the interpretation of the input fields and has the same form and function as the format argument for the scanf_s function. 중복되는 문자열 간에 복사가 이뤄지면 이 동작은 정의되지 않습니다.If copying occurs between strings that overlap, the behavior is undefined.

swscanf_s 의 와이드 문자 버전이 sscanf_s;에 대 한 인수 swscanf_s 는 와이드 문자 문자열입니다.swscanf_s is a wide-character version of sscanf_s; the arguments to swscanf_s are wide-character strings. sscanf_s 멀티 바이트 16 진수 문자를 처리 하지 않습니다.sscanf_s does not handle multibyte hexadecimal characters. swscanf_s 유니코드 전자 16 진수 또는 "호환 영역" 문자를 처리 하지 않습니다.swscanf_s does not handle Unicode full-width hexadecimal or "compatibility zone" characters. 그렇지 않으면 swscanf_s 하 고 sscanf_s 동일 하 게 작동 합니다.Otherwise, swscanf_s and sscanf_s behave identically.

접미사가 있는 이러한 함수 버전을 _l 접미사 현재 스레드 로캘 대신 전달 된 로캘 매개 변수를 사용 한다는 점을 제외 하면 동일 합니다.The versions of these functions that have the _l suffix are identical except that they use the locale parameter that's 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_s_stscanf_s sscanf_ssscanf_s sscanf_ssscanf_s swscanf_sswscanf_s
_stscanf_s_l_stscanf_s_l _sscanf_s_l_sscanf_s_l _sscanf_s_l_sscanf_s_l _swscanf_s_l_swscanf_s_l

요구 사항Requirements

루틴에서 반환된 값Routine 필수 헤더Required header
sscanf_s, _sscanf_s_lsscanf_s, _sscanf_s_l <stdio.h><stdio.h>
swscanf_s, _swscanf_s_lswscanf_s, _swscanf_s_l <stdio.h> 또는 <wchar.h><stdio.h> or <wchar.h>

호환성에 대한 자세한 내용은 호환성을 참조하세요.For additional compatibility information, see Compatibility.

예제Example

// crt_sscanf_s.c
// This program uses sscanf_s to read data items
// from a string named tokenstring, then displays them.

#include <stdio.h>
#include <stdlib.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 plus null terminator
   sscanf_s( tokenstring, "%s", s, (unsigned)_countof(s) );
   sscanf_s( tokenstring, "%c", &c, (unsigned)sizeof(char) );
   sscanf_s( tokenstring, "%d", &i );
   sscanf_s( tokenstring, "%f", &fp );

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

참고자료See also

스트림 I/OStream 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