다음을 통해 공유


scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l

데이터는 표준 입력 스트림에서 읽기를 포맷합니다.이러한 버전의 수 scanf, _scanf_l, wscanf, _wscanf_l 에 설명 된 대로 보안 향상 기능을 CRT의 보안 기능.

int scanf_s(
   const char *format [,
   argument]... 
);
int _scanf_s_l(
   const char *format,
   locale_t locale [,
   argument]... 
);
int wscanf_s(
   const wchar_t *format [,
   argument]... 
);
int _wscanf_s_l(
   const wchar_t *format,
   locale_t locale [,
   argument]... 
);

매개 변수

  • format
    제어 문자열 형식입니다.

  • argument
    선택적 인수입니다.

  • locale
    사용 하는 로캘.

반환 값

성공적으로 변환 되 고 지정 된 필드의 수를 반환 합니다. 반환 값은 읽을 수 있지만 지정 된 필드가 포함 되지 않습니다.반환 값이 0 이면 필드가 없는 할당 된 것을 나타냅니다.반환 값은 EOF 에 오류 또는 파일 끝 문자 또는 문자열의 끝 문자 문자를 읽는 첫 번째 시도에서 발생 하는 경우.경우 format 되는 NULL 에 설명 된 대로 포인터에 잘못 된 매개 변수 처리기 호출 매개 변수 유효성 검사.실행을 계속 하려면 허용 되는 경우 scanf_s 및 wscanf_s 반환 EOF 로 설정 하 고 errno 에 EINVAL.

이러한 문제 및 기타 오류 코드에 대한 내용은 _sys_nerr, _doserrno, errno, _sys_errlist,.

설명

scanf_s 함수가 표준 입력된 스트림에서 데이터를 읽고 stdin 에서 지정 된 위치에 데이터를 기록 하 고 argument.각 argument 형식 지정자에 해당 하는 형식의 변수에 대한 포인터 이어야 합니다 format.중복 문자열 사이 복사를 사용 하면 동작이 정의 되지 않습니다.

wscanf_s와이드 문자 버전인 scanf_s. format 한 인수 wscanf_s 와이드 문자 문자열입니다.wscanf_s및 scanf_s 스트림 ANSI 모드에서 연 경우 동일 하 게 동일 하 게 동작 합니다.scanf_s현재 입력 스트림에서 유니코드를 지원 하지 않습니다.

이러한 함수 버전을 _l 접미사는 전달 하지 않고 현재 스레드 로캘은 로캘 매개 변수를 사용 하는 것을 제외 하 고 동일 합니다.

Unlike scanfand wscanf, scanf_sand wscanf_srequire the buffer size to be specified for all input parameters of type c, C, s, S, or [.문자에서 버퍼 크기 버퍼 또는 변수를 포인터를 바로 다음에 추가 매개 변수로 전달 됩니다.예를 들어, 문자열을 읽는 경우 해당 문자열에 대한 버퍼 크기를 다음과 같이 전달 합니다.

char s[10];

scanf_s("%9s", s, _countof(s)); // buffer size is 10, width specification is 9

버퍼 크기는 종료 null이 포함 되어 있습니다.너비 지정 필드 토큰에서 읽기 버퍼에 맞는지를 사용할 수 있습니다.사양 너비 필드를 사용 하 고 토큰 버퍼에 비해 너무 큽니다 읽을 경우 아무 것도 해당 버퍼에 기록 됩니다.

[!참고]

Size 매개 변수 형식인 unsigned, size_t.

다음 예제에서는 버퍼 크기 매개 변수 바이트가 아닌 문자의 최대 수를 설명 합니다.호출에서 wscanf_s, 버퍼 형식으로 표시 되는 문자 너비 서식 지정자로 표시 되는 문자 너비에 맞지 않습니다.

wchar_t ws[10];
wscanf_s("%9S", ws, _countof(ws));

S 형식 지정자 문자 너비는 "반대" 함수에 의해 지원 되는 기본 너비를 사용 하는 나타냅니다.함수는 더블 바이트 문자를 지 원하는 단일 바이트 문자 너비입니다.이 예제에서는 최대 9 단일 바이트 와이드 문자 문자열을 읽고을 더블 바이트 문자 버퍼에 적용 됩니다.문자는 싱글바이트 값으로 처리 됩니다. 처음 두 문자가 저장 됩니다 ws[0], 두 번째 저장 된 ws[1]등.

문자인 경우 하나는 단일 문자를 같이 될 수 있습니다.

char c;

scanf_s("%c", &c, 1);

Null 종료 문자열에 대한 여러 개의 문자를 읽을 때 정수 폭 사양 및 버퍼 크기가 사용 됩니다.

char c[4];

scanf_s("%4c", &c, _countof(c)); // not null terminated

자세한 내용은 scanf 폭 사양을 참조하십시오.

일반 텍스트 루틴 매핑

TCHAR입니다.H 루틴

_UNICODE 및 _Mbcs가 정의 되어 있지 않습니다

_Mbcs가 정의

_Unicode가 정의

_tscanf_s

scanf_s

scanf_s

wscanf_s

_tscanf_s_l

_scanf_s_l

_scanf_s_l

_wscanf_s_l

자세한 내용은 형식 사양을 필드-scanf 함수와 wscanf 함수.

요구 사항

루틴

필수 헤더

scanf_s, _scanf_s_l

<stdio.h>

wscanf_s, _wscanf_s_l

<stdio.h> 또는 <wchar.h>

콘솔에서 지원 되지 않습니다 Windows 스토어 응용 프로그램입니다.콘솔에 연결 된 표준 스트림 핸들 stdin, stdout, 및 stderr, C 런타임 함수를 사용 하기 전에 이동 해야 Windows 스토어 응용 프로그램입니다.추가 호환성 정보를 참조 하십시오. 호환성 소개에서 합니다.

예제

// crt_scanf_s.c
// This program uses the scanf_s and wscanf_s functions
// to read formatted input.
  
#include <stdio.h>
#include <stdlib.h>

int main( void )
{
   int      i,
            result;
   float    fp;
   char     c,
            s[80];
   wchar_t  wc,
            ws[80];

   result = scanf_s( "%d %f %c %C %s %S", &i, &fp, &c, 1,
                     &wc, 1, s, _countof(s), ws, _countof(ws) );
   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_s( L"%d %f %hc %lc %S %ls", &i, &fp, &c, 2,
                      &wc, 1, s, _countof(s), ws, _countof(ws) );
   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);
}
  

해당 .NET Framework 항목

참고 항목

참조

부동 소수점 지원

스트림 I/O

로캘

fscanf, _fscanf_l, fwscanf, _fwscanf_l

printf, _printf_l, wprintf, _wprintf_l

sprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l

sscanf, _sscanf_l, swscanf, _swscanf_l