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 항목
참고 Parse 메서드 같은 System::Double::Parse.
참고 항목
참조
fscanf, _fscanf_l, fwscanf, _fwscanf_l
printf, _printf_l, wprintf, _wprintf_l