vsscanf_s, vswscanf_s

문자열에서 형식이 지정된 데이터를 읽습니다. 이러한 버전은 CRTvswscanfvsscanf 보안 기능에 설명된 대로 향상된 보안 기능을 제공합니다.

구문

int vsscanf_s(
   const char *buffer,
   const char *format,
   va_list argptr
);
int vswscanf_s(
   const wchar_t *buffer,
   const wchar_t *format,
   va_list arglist
);

매개 변수

buffer
저장된 데이터

format
형식 컨트롤 문자열입니다. 자세한 내용은 형식 사양 필드 scanfwscanf 함수를 참조하세요.

arglist
가변 인수 목록입니다.

반환 값

이러한 각 함수는 성공적으로 변환되고 할당된 필드 수를 반환합니다. 반환 값에는 읽었으나 할당되지 않은 필드가 포함되지 않습니다. 반환 값이 0이면 할당된 필드가 없음을 나타냅니다. 오류가 발생하거나 첫 번째 변환 전에 문자열의 끝에 도달할 경우 반환 값은 EOF입니다.

포인터이거나 format 포인터인 NULL 경우 buffer 매개 변수 유효성 검사에 설명된 대로 잘못된 매개 변수 처리기가 호출됩니다. 계속해서 실행하도록 허용된 경우 이러한 함수가 -1을 반환하고 errnoEINVAL로 설정합니다.

이러한 오류 코드 및 기타 오류 코드에 대한 자세한 내용은 , _doserrno, _sys_errlist_sys_nerr 를 참조하세요errno.

설명

vsscanf_s 함수는 arglist 인수 목록의 각 인수가 제공하는 위치로 buffer의 데이터를 읽습니다. 인수 목록의 인수는 format의 형식 지정자에 해당하는 형식의 변수에 대한 포인터를 지정합니다. 보안이 낮은 버전vsscanf과 달리 []로 묶인 형식 필드 문자 c, C, s, S 또는 문자열 제어 집합을 사용하는 경우 버퍼 크기 매개 변수가 필요합니다. 문자의 버퍼 크기는 필요한 각 버퍼 매개 변수 바로 뒤의 다른 매개 변수로 제공되어야 합니다.

버퍼 크기에는 종료 null이 포함되어 있습니다. 너비 사양 필드를 사용하면 읽은 토큰이 버퍼에 맞는지 확인할 수 있습니다. 너비 사양 필드가 사용되지 않고 읽은 토큰이 너무 커서 버퍼에 맞지 않으면 해당 버퍼에 기록되지 않습니다.

자세한 내용은 ,_scanf_s_l, wscanf_s_wscanf_s_lscanf 형식 필드 문자를 참조scanf_s하세요.

참고 항목

크기 매개 변수는 size_t가 아니라 unsigned 형식입니다.

format 인수는 입력 필드의 해석을 제어하며, 형식과 기능은 scanf_s 함수의 format 인수와 동일합니다. 중복되는 문자열 간에 복사가 이뤄지면 이 동작은 정의되지 않습니다.

vswscanf_svsscanf_s의 와이드 문자 버전이며, vswscanf_s 에 대한 인수는 와이드 문자 문자열입니다. vsscanf_s 는 멀티바이트 16진수 문자를 처리하지 않습니다. vswscanf_s 는 유니코드 전폭 16진수 또는 "호환성 영역" 문자를 처리하지 않습니다. 그렇지 않으면 vswscanf_svsscanf_s 은 동일하게 작동합니다.

일반 텍스트 루틴 매핑

TCHAR.H 루틴 _UNICODE 정의 _MBCS 되지 않음 _MBCS 정의 _UNICODE 정의
_vstscanf_s vsscanf_s vsscanf_s vswscanf_s

요구 사항

루틴에서 반환된 값 필수 헤더
vsscanf_s <stdio.h>
vswscanf_s <stdio.h> 또는 <wchar.h>

호환성에 대한 자세한 내용은 호환성을 참조하세요.

예시

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

#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>

int call_vsscanf_s(char *tokenstring, char *format, ...)
{
    int result;
    va_list arglist;
    va_start(arglist, format);
    result = vsscanf_s(tokenstring, format, arglist);
    va_end(arglist);
    return result;
}

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:
    call_vsscanf_s(tokenstring, "%80s", s, _countof(s));
    call_vsscanf_s(tokenstring, "%c", &c, sizeof(char));
    call_vsscanf_s(tokenstring, "%d", &i);
    call_vsscanf_s(tokenstring, "%f", &fp);

    // 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

참고 항목

스트림 I/O
scanf, _scanf_l, wscanf, _wscanf_l
sscanf, _sscanf_l, swscanf, _swscanf_l
sscanf_s, _sscanf_s_l, swscanf_s, _swscanf_s_l
sprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l
vsscanf, vswscanf