scanf 너비 사양scanf Width Specification

이 정보는 scanf_s와 같은 보안 버전을 비롯하여 함수의 scanf 패밀리에서 형식 문자열의 해석에 적용됩니다.This information applies to the interpretation of format strings in the scanf family of functions, including the secure versions such as scanf_s. 다음 함수는 일반적으로 입력 스트림이 일련의 토큰으로 나뉜다고 가정합니다.These functions normally assume the input stream is divided into a sequence of tokens. 토큰은 공백(공백, 탭 또는 줄 바꿈)으로 구분되거나 숫자 형식의 경우 숫자 텍스트로 변환할 수 없는 첫 번째 문자가 나타내는 숫자 데이터 형식의 자연스러운 끝으로 구분됩니다.Tokens are separated by whitespace (space, tab, or newline), or in the case of numerical types, by the natural end of a numerical data type as indicated by the first character that cannot be converted into numerical text. 입력 구문 분석을 토큰의 자연스러운 끝 이전에 중단하는 데 너비 지정을 사용할 수 있습니다.However, the width specification may be used to cause parsing of the input to stop before the natural end of a token.

width 지정은 너비 필드라고 하는 양의 정수를 포함할 수 있는 형식 필드 한정자와 % 사이의 문자 및 필드 형식의 수정자(예: 정수 유형이 short 또는 long인지 표시)로도 간주할 수 있는 필드의 크기를 나타내는 하나 이상의 문자로 구성되어 있습니다.The width specification consists of characters between the % and the type field specifier, which may include a positive integer called the width field and one or more characters indicating the size of the field, which may also be considered as modifiers of the type of the field, such as an indication of whether the integer type is short or long. 이러한 문자를 크기 접두사라고 합니다.Such characters are referred to as the size prefix.

너비 필드The Width Field

너비 필드는 해당 필드에서 읽을 최대 문자 수를 제어하는 양의 10진수입니다.The width field is a positive decimal integer controlling the maximum number of characters to be read for that field. 해당 argument에는 너비 문자보다 적은 수의 문자가 변환되어 저장됩니다.No more than width characters are converted and stored at the corresponding argument. 너비에 도달하기 전에 공백 문자(공백, 탭 또는 줄바꿈) 또는 지정된 형식에 따라 변환할 수 없는 문자가 발생한 경우 너비 문자보다 적은 수의 문자를 읽을 수 있습니다.Fewer than width characters may be read if a whitespace character (space, tab, or newline) or a character that cannot be converted according to the given format occurs before width is reached.

너비 지정은 이러한 함수의 보안 버전(즉, scanf_s, wscanf_s 등)에서 요구하는 버퍼 크기 인수와 별개입니다.The width specification is separate and distinct from the buffer size argument required by the secure versions of these functions (i.e., scanf_s, wscanf_s, etc.). 다음 예에서는 너비가 20으로 지정되어 있습니다. 즉, 입력 스트림에서 최대 20자를 읽습니다.In the following example, the width specification is 20, indicating that up to 20 characters are to be read from the input stream. 버퍼 길이는 읽을 수 있는 20자와 null 종결자를 위한 공간을 포함한 21입니다.The buffer length is 21, which includes room for the possible 20 characters plus the null terminator:

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

너비 필드가 사용되지 않은 경우 scanf_s는 전체 토큰을 문자열로 읽으려고 합니다.If the width field is not used, scanf_s will attempt to read the entire token into the string. 지정된 크기가 작아 전체 토큰을 포함할 수 없는 경우에는 대상 문자열에 아무것도 기록되지 않습니다.If the size specified is not large enough to hold the entire token, nothing will be written to the destination string. 너비 필드가 지정되어 있으면 토큰의 첫 번째 너비자가 null 종결자와 함께 대상 문자열에 기록됩니다.If the width field is specified, then the first width characters in the token will be written to the destination string along with the null terminator.

크기 접두사The Size Prefix

선택적 접두사인 h, l, ll, I64Largument(수정하는 형식 문자에 따라 long 또는 short, 단일 바이트 문자 또는 와이드 문자)의 크기를 나타냅니다.The optional prefixes h, l, ll, I64, and L indicate the size of the argument (long or short, single-byte character or wide character, depending upon the type character that they modify). 이러한 서식 지정 문자는 scanf 또는 wscanf 함수의 형식 문자와 함께 사용되어 다음 표에 표시된 것처럼 인수의 해석을 지정합니다.These format-specification characters are used with type characters in scanf or wscanf functions to specify interpretation of arguments as shown in the following table. 형식 접두사 I64는 Microsoft 확장으로, ANSI와 호환되지 않습니다.The type prefix I64 is a Microsoft extension and is not ANSI compatible. 형식 문자 및 해당 의미는 scanf 형식 필드 문자의 "scanf 함수에 대한 형식 문자" 표에 나와 있습니다.The type characters and their meanings are described in the "Type Characters for scanf functions" table in scanf Type Field Characters.

참고

데이터 형식 char과 함께 사용되는 경우 h, lL 접두사는 Microsoft 확장입니다.The h, l, and L prefixes are Microsoft extensions when used with data of type char.

Scanf 및 wscanf 서식-형식 지정자에 대한 크기 접두사Size Prefixes for scanf and wscanf Format-Type Specifiers

지정할 함수To specify 접두사 사용Use prefix 형식 지정자 사용With type specifier
doubledouble ll e, E, f, g 또는 Ge, E, f, g, or G
long double(double과 같음)long double (same as double) LL e, E, f, g 또는 Ge, E, f, g, or G
long intlong int ll d, i, o, x 또는 Xd, i, o, x, or X
long unsigned intlong unsigned int ll uu
long longlong long llll d, i, o, x 또는 Xd, i, o, x, or X
short int hh d, i, o, x 또는 Xd, i, o, x, or X
short unsigned intshort unsigned int hh uu
int64int64 I64I64 d, i, o, u, x 또는 Xd, i, o, u, x, or X
단일 바이트 문자(scanf 사용)Single-byte character with scanf hh c 또는 Cc or C
단일 바이트 문자(wscanf 사용)Single-byte character with wscanf hh c 또는 Cc or C
와이드 문자(scanf 사용)Wide character with scanf ll c 또는 Cc or C
와이드 문자(wscanf 사용)Wide character with wscanf ll c 또는 Cc, or C
단일 바이트 문자열(scanf 사용)Single-byte - character string with scanf hh s 또는 Ss or S
단일 바이트 문자열(wscanf 사용)Single-byte - character string with wscanf hh s 또는 Ss or S
와이드 문자열(scanf 사용)Wide-character string with scanf ll s 또는 Ss or S
와이드 문자열(wscanf 사용)Wide-character string with wscanf ll s 또는 Ss or S

다음 예에서는 scanf_s 함수 및 wscanf_s 함수와 함께 hl를 사용합니다.The following examples use h and l with scanf_s functions and wscanf_s functions:

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

scanf 패밀리에 비보안 함수를 사용하는 경우 이전 인수의 버퍼 길이를 나타내는 크기 매개 변수를 생략합니다.If using an unsecure function in the scanf family, omit the size parameter indicating the buffer length of the preceding argument.

구분되지 않은 문자열 읽기Reading Undelimited strings

공백 문자로 구분되지 않은 문자열을 읽으려면 대괄호([ ])로 둘러싸인 문자 집합이 s(문자열) 형식 문자를 대신할 수 있습니다.To read strings not delimited by whitespace characters, a set of characters in brackets ([ ]) can be substituted for the s (string) type character. 대괄호로 둘러싸인 문자 집합을 제어 문자열이라고 합니다.The set of characters in brackets is referred to as a control string. 해당 입력된 필드는 제어 문자열에 나타나지 않는 첫 번째 문자까지 읽힙니다.The corresponding input field is read up to the first character that does not appear in the control string. 집합의 첫 번째 문자가 캐럿(^)이면 반대로 적용됩니다. 즉, 문자 집합의 나머지 부분에 나타나는 않는 첫 번째 문자까지 입력 필드가 읽힙니다.If the first character in the set is a caret (^), the effect is reversed: The input field is read up to the first character that does appear in the rest of the character set.

%[a-z]%[z-a]%[abcde...z]와 동일한 것으로 해석됩니다.Note that %[a-z] and %[z-a] are interpreted as equivalent to %[abcde...z]. 이는 공통 scanf 함수 확장이지만 ANSI 표준에는 이러한 확장이 필요하지 않습니다.This is a common scanf function extension, but note that the ANSI standard does not require it.

종결되지 않은 문자열 읽기Reading Unterminated strings

null 종결 문자('\0')를 저장하지 않고 문자열을 저장하려면 사양 %nc를 사용합니다. 여기서 n은 10진수입니다.To store a string without storing a terminating null character ('\0'), use the specification %nc where n is a decimal integer. 이 경우에 c 형식 문자는 인수가 문자 배열에 대한 포인터임을 나타냅니다.In this case, the c type character indicates that the argument is a pointer to a character array. 입력 스트림에서 지정된 위치로 다음 n개 문자를 읽고 null 문자('\0')는 추가되지 않습니다.The next n characters are read from the input stream into the specified location, and no null character ('\0') is appended. n이 지정되어 있지 않으면 기본값은 1입니다.If n is not specified, its default value is 1.

scanf가 필드 읽기를 중지하는 경우When scanf stops reading a field

scanf 함수는 각 입력 필드를 문자 단위로 검색합니다.The scanf function scans each input field, character by character. 여러 가지 이유로 인해 이 함수가 공백 문자에 도달하기 전에 특정 입력 필드 읽기를 중지할 수 있습니다.It may stop reading a particular input field before it reaches a space character for a variety of reasons:

  • 지정된 너비에 도달한 경우The specified width has been reached.

  • 지정된 대로 다음 문자를 변환할 수 없는 경우The next character cannot be converted as specified.

  • 다음 문자가 일치해야 하는 제어 문자열의 문자와 충돌하는 경우The next character conflicts with a character in the control string that it is supposed to match.

  • 다음 문자가 지정된 문자 집합에 나타나지 않는 경우The next character fails to appear in a given character set.

    어떤 이유로든 scanf 함수가 입력 필드 읽기를 중지한 경우 다음 입력 필드는 읽지 않은 첫 번째 문자에서 시작되는 것으로 간주됩니다.For whatever reason, when the scanf function stops reading an input field, the next input field is considered to begin at the first unread character. 충돌하는 문자(하나가 있는 경우)는 읽지 않은 것으로 간주되고 다음 입력 필드의 첫 번째 문자 또는 입력 스트림에서 후속 읽기 작업의 첫 번째 문자입니다.The conflicting character, if there is one, is considered unread and is the first character of the next input field or the first character in subsequent read operations on the input stream.

참고 항목See Also

scanf, _scanf_l, wscanf, _wscanf_l scanf, _scanf_l, wscanf, _wscanf_l
scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l
형식 사양 필드: scanf 및 wscanf 함수 Format Specification Fields: scanf and wscanf Functions
scanf 형식 필드 문자scanf Type Field Characters