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

buffer
저장된 데이터Stored data

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

argument
선택적 인수Optional arguments

locale
사용할 로캘입니다.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.

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

이 오류 및 다른 오류 코드에 대한 자세한 내용은 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 함수는 각 argument에서 제공하는 위치로 buffer의 데이터를 읽습니다.The sscanf_s function reads data from buffer into the location that's given by each argument. 형식 문자열 뒤의 인수는 format의 형식 지정자에 해당하는 형식의 변수에 대한 포인터를 지정합니다.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.

참고

크기 매개 변수는 size_t가 아니라 unsigned 형식입니다.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.

format 인수는 입력 필드의 해석을 제어하며, 형식과 기능은 scanf_s 함수의 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_s function. 중복되는 문자열 간에 복사가 이뤄지면 이 동작은 정의되지 않습니다.If copying occurs between strings that overlap, the behavior is undefined.

swscanf_ssscanf_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_ssscanf_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 sscanf_s sscanf_s swscanf_s
_stscanf_s_l _sscanf_s_l _sscanf_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/O Stream I/O
fscanf, _fscanf_l, fwscanf, _fwscanf_l fscanf, _fscanf_l, fwscanf, _fwscanf_l
scanf, _scanf_l, wscanf, _wscanf_l scanf, _scanf_l, wscanf, _wscanf_l
sprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l sprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l
snprintf, _snprintf, _snprintf_l, _snwprintf, _snwprintf_lsnprintf, _snprintf, _snprintf_l, _snwprintf, _snwprintf_l