다음을 통해 공유


scanf 너비 사양

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

사양은 width 필드라는 width 양의 정수와 필드의 크기를 나타내는 하나 이상의 문자를 포함할 수 있는 형식 필드 지정자 사이의 % 문자로 구성되며, 정수 형식 short long인지 여부를 나타내는 표시와 같이 필드 형식의 한정자로 간주될 수도 있습니다. 이러한 문자를 크기 접두사라고 합니다.

width 필드

width 필드는 해당 필드에 대해 읽을 최대 문자 수를 제어하는 양의 10진수 정수입니다. 문자가 width 변환되어 해당 argument문자에 저장됩니다. 지정된 형식에 따라 변환할 수 없는 공백 문자 또는 문자가 도달하기 전에 width 발생하는 경우 문자보다 width 적게 읽을 수 있습니다.

너비 사양은 이러한 함수의 보안 버전(예scanf_swscanf_s: 등)에 필요한 버퍼 크기 인수와 별개입니다. 다음 예에서는 너비가 20으로 지정되어 있습니다. 즉, 입력 스트림에서 최대 20자를 읽습니다. 버퍼 길이는 읽을 수 있는 20자와 null 종결자를 위한 공간을 포함한 21입니다.

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

width 필드를 사용하지 scanf_s 않으면 전체 토큰을 문자열로 읽으려고 시도합니다. 지정된 크기가 전체 토큰을 보유할 만큼 크지 않으면 대상 문자열에 아무 것도 기록되지 않습니다. width 필드를 지정하면 토큰의 첫 번째 width 문자가 null 종결자와 함께 대상 문자열에 기록됩니다.

크기 접두사

선택적 접두사h, hh, , lllI64L 크기 argument (수정하는 형식 문자에 따라 long 또는 short, single-byte 문자 또는 와이드 문자)를 나타냅니다. 이러한 서식 지정 문자는 scanf 또는 wscanf 함수의 형식 문자와 함께 사용되어 다음 표에 표시된 것처럼 인수의 해석을 지정합니다. 형식 접두 I64 사는 Microsoft 확장이며 표준 C와 호환되지 않습니다. 형식 문자와 해당 의미는 형식 필드 문자의 "scanf 함수에 대한 형식 문자" 테이블에 scanf 설명되어 있습니다.

참고 항목

h형식의 char데이터와 함께 사용할 경우 , lL 접두사는 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
char hh d, i, o, x 또는 X
unsigned char hh 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

다음 예제에서는 함수 및 l scanf_s 함수를 wscanf_s 사용하고 h 사용합니다.

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

scanf 패밀리에 비보안 함수를 사용하는 경우 이전 인수의 버퍼 길이를 나타내는 크기 매개 변수를 생략합니다.

읽을 수 없는 문자열 읽기

공백 문자로 구분되지 않은 문자열을 읽으려면 대괄호([ ])의 문자 집합을 (문자열) 형식 문자로 s 대체할 수 있습니다. 대괄호 안에 있는 문자 집합을 컨트롤 문자열이라고 합니다. 해당 입력 필드는 컨트롤 문자열에 표시되지 않는 첫 번째 문자까지 읽습니다. 집합의 첫 번째 문자가 캐럿(^)이면 반대로 적용됩니다. 즉, 문자 집합의 나머지 부분에 나타나는 않는 첫 번째 문자까지 입력 필드가 읽힙니다.

둘 다 %[a-z]%[z-a] 동일한 것으로 %[abcde...z]해석됩니다. 일반적인 scanf 함수 확장이지만 표준 C에서는 필요하지 않습니다.

수정되지 않은 문자열 읽기

종료 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
형식 사양 필드: scanfwscanf 함수
scanf 형식 필드 문자