다음을 통해 공유


scanf 너비 사양

이 정보는 scanf_s와 같은 보안 버전을 포함한 함수의 scanf군에서 형식 문자열의 해석에 적용됩니다. 일반적으로 이러한 함수는 입력 스트림이 토큰 시퀀스로 분할된다고 가정합니다. 토큰은 공백(공백, 탭 또는 줄 바꿈) 또는 숫자 텍스트로 변환될 수 없는 숫자 데이터의 형식의 경우 첫 번째 문자에 의해 표시된 대로 숫자 데이터의 형식의 자연스러운 끝에 의해 분리됩니다. 그러나, 입력을 구문 분석을 토큰의 자연스러운 끝 이전에 중지하기 위해 너비 지정이 사용될 수 있습니다.

width 지정은 % 과 형식 필드 지정자 사이의 문자들로 구성되어 있습니다. 이는 width 필드로 불리는 양의 정수 및 하나 이상의 필드 크기 표시 문자를 포함할 수 있으며, 정수 형식이 short인지 long인지의 여부에 대한 표시와 같이, 또한 필드 형식의 수정자로 고려될 수 있습니다. 이러한 문자를 크기 접두사라고 합니다.

너비 필드

너비 필드는 해당 필드가 읽을 최대 숫자를 제어하는 양의 10진수 정수입니다. width보다 더 많은 문자는 변환되고 상응하는 argument에 저장되지 않습니다. 만약 공백 문자(공백, 탭 또는 줄 바꿈) 또는 주어진 형식에 따라 변환될 수 없는 문자가 width에 도달하기 전에 발생하는 경우, width 미만의 문자가 읽힐 수 있습니다.

너비 지정은 이러한 함수의 안전한 버전(예를 들어, scanf_s, wscanf_s 등)에서 요구되는 버퍼 크기 인수와 구분되며 구별됩니다. 다음 예제에서, 너비 지정은 20입니다. 이는 입력 스트림에서 최대 20 문자까지 읽을 수 있다는 것을 나타냅니다. 버퍼 길이는 20개의 문자에 null 종결 문자를 더한 수 있는 공간을 포함하는 21입니다.

char str[21];
scanf_s("%20s", str, 21);

width 필드가 사용되지 않으면, scanf_s는 전체 토큰 문자열에 읽기를 시도합니다. 지정된 크기가 전체 토큰을 보유하기에 충분히 크지 않은 경우, 대상 문자열에 아무 것도 기록되지 않습니다. width 필드가 지정된 경우, 토큰의 첫 번째 width 문자들이 null 종결 문자와 함께 대상 문자열에 기록됩니다.

크기 접두사

선택적 접두사 h, l, ll, I64, 및 L는 argument의 크기를 나타냅니다. (수정하는 문자 형식에 따라 long인지 short인지, 단일 바이트 문자인지 와이드 문자인지) 다음 표와 같이 이러한 형식 지정 문자는 인수의 해석을 지정하기 위해 scanf 또는 wscanf 함수의 형식 문자와 함께 사용됩니다. 형식 접두사 I64는 Microsoft 확장이며, ANSI와 호환되지 않습니다. 형식 문자 및 그 의미는 scanf 형식 필드 문자의 "Type Characters for scanf functions" 표에 설명되어 있습니다.

참고

h, l, 및 L 접두사는 char 형식의 데이터와 함께 사용되는 Microsoft 확장입니다.

scanf 및 wscanf 서식-형식 지정자의 크기 접두사

지정 대상

접두사를 사용 합니다.

형식 지정자를 사용하여

double

l

e, E, f, g, 또는 G

long double (double과 동일)

L

e, E, f, g, 또는 G

long int

l

d, i, o, x, 또는 X

long unsigned int

l

u

long long

ll

d, i, o, x, 또는 X

short int

h

d, i, o, x, 또는 X

short unsigned int

h

u

__int64

I64

d, i, o, u, x, 또는 X

scanf를 사용하는 단일 바이트 문자

h

c 또는 C

wscanf를 사용하는 단일 바이트 문자

h

c 또는 C

scanf를 사용하는 와이드 문자

l

c 또는 C

wscanf를 사용하는 와이드 문자

l

c 또는 C

단일 바이트 – scanf를 사용하는 문자열

h

s 또는 S

단일 바이트 – wscanf를 사용하는 문자열

h

s 또는 S

scanf를 사용하는 와이드 문자 문자열

l

s 또는 S

wscanf를 사용하는 와이드 문자 문자열

l

s 또는 S

다음 예제는 scanf_s 함수 및 wscanf_s 함수와 함께 hl를 사용합니다.

scanf_s( "%ls", &x, 2 );     // Read a wide-character string
wscanf_s( "%hC",&x, 2 );    // Read a single-byte character

scanf 함수군의 안전하지 않은 함수를 사용하는 경우, 이전 인수의 버퍼 길이를 가리키는 크기 매개 변수를 생략합니다.

범위가 정해지지 않은 문자열 읽기

공백 문자에 의해 범위가 정해지지 않은 문자열을 읽기 위해서는 대괄호 ([]) 안의 문자 집합은 s (문자열) 형식 문자로 대체될 수 있습니다. 대괄호 안에 있는 문자 집합은 제어 문자열이라고 합니다. 해당 입력 필드는 제어 문자열에 나타나지 않는 첫 번째 문자까지 읽힙니다. 집합의 첫 번째 문자가 탈자 부호(^)이면, 효과는 반대가 됩니다. 입력 필드는 문자 집합의 나머지 부분에 나타나지 않은 첫 번째 문자까지 읽힙니다.

%[a-z] 및 **%[z-a]**는 **%[abcde...z]**와 동일한 것으로 해석됩니다. 이것은 일반적인 scanf 함수 확장이지만, ANSI 표준은 이것 요구하지 않는다는 것에 유의하십시오.

종료되지 않은 문자열 읽기

종료 null 문자('\0')를 저장하지 않고 문자열을 저장하려면, %nc 지정을 사용합니다. 여기에서 n은 10 진수 정수입니다. 이 경우에 c 형식 문자는 인수가 문자 배열을 가리키는 포인터임을 나타냅니다. 다음 n 문자는 지정된 위치의 입력 스트림으로부터 읽히며 null 문자('\0')가 추가되지 않습니다. n이 지정되지 않은 경우, 기본값은 1입니다.

scanf가 필드 읽기를 중단하는 때

scanf 함수는 각 입력 필드를 문자 단위로 검색합니다. 여러가지 이유로 공백 문자에 도달하기 전에 특정 입력된 필드의 읽기가 중단될 수 있습니다.

  • 지정된 너비에 도달했습니다.

  • 지정된 대로 다음 문자를 변환할 수 없습니다.

  • 일치해야 하는 제어 문자열의 문자가 다음 문자와 충돌합니다.

  • 다음 문자가 주어진 문자 집합에서 나타나기에 실패합니다.

어떤 이유로든, scanf 함수가 입력 필드의 읽기를 중단하면, 첫 번째 읽히지 않은 문자에서 다음 입력 필드가 시작하는 것으로 간주됩니다. 충돌하는 문자가 있는 경우, 해당 문자는 읽히지 않은 것으로 간주되며 다음 입력 필드의 첫 번째 문자 또는 입력 스트림의 다음 읽기 작업의 첫 번째 문자가 됩니다.

참고 항목

참조

scanf, _scanf_l, wscanf, _wscanf_l

scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l

형식 사양 필드: scanf 및 wscanf 함수

scanf 형식 필드 문자