wscanf, fwscanf, swscanf, wscanf_s, fwscanf_s, swscanf_s
| 헤더 <wchar.h>
|
||
int wscanf( const wchar_t* format, ... );
|
에 정의됨 (1) | (C95부터) (C99까지) |
int wscanf( const wchar_t* restrict format, ... );
|
(C99부터) | |
int fwscanf( FILE* stream, const wchar_t* format, ... );
|
(2) | (C95부터) (C99까지) |
int fwscanf( FILE* restrict stream,
const wchar_t* restrict format, ... );
|
(C99부터) | |
int swscanf( const wchar_t* buffer, const wchar_t* format, ... );
|
(3) | (C95부터) (C99까지) |
int swscanf( const wchar_t* restrict buffer,
const wchar_t* restrict format, ... );
|
(C99부터) | |
int wscanf_s( const wchar_t* restrict format, ...);
|
(4) | (C11부터) |
int fwscanf_s( FILE* restrict stream,
const wchar_t* restrict format, ...);
|
(5) | (C11부터) |
int swscanf_s( const wchar_t* restrict s,
const wchar_t* restrict format, ...);
|
(6) | (C11부터) |
다양한 소스에서 데이터를 읽고, format 에 따라 해석하여 결과를 지정된 위치에 저장합니다.
stream에서 데이터를 읽습니다.buffer에서 데이터를 읽습니다. 문자열의 끝에 도달하는 것은 fwscanf%c, %s, %[ 변환 지정자가 각각 두 개의 인수 (일반 포인터와 수신 배열의 크기를 나타내는 rsize_t 타입의 값)를 기대하며, 단일 와이드 문자로 1로 읽을 때는 %lc일 수 있으며, 또한 다음 오류가 런타임에 감지되어 현재 설치된 제약 조건 처리기 함수를 호출합니다:
- 포인터 타입의 인수 중 하나가 널 포인터입니다
format,stream, 또는buffer가 널 포인터입니다%c,%s, 또는%[로 작성될 문자 수에 종료 널 문자를 더한 값이 해당 변환 지정자에 대해 제공된 두 번째 (rsize_t) 인수를 초과합니다- 선택적으로, 알 수 없는 변환 지정자와 같은 기타 감지 가능한 오류
wscanf_s, fwscanf_s, swscanf_s은 구현에서 __STDC_LIB_EXT1__를 정의하고 사용자가 __STDC_WANT_LIB_EXT1__를 1로 정의한 경우에만 사용할 수 있습니다. <wchar.h>를 포함하기 전에 말입니다.매개변수
| stream | - | 읽을 입력 파일 스트림 |
| buffer | - | 읽을 널 종료 와이드 문자열을 가리키는 포인터 |
| format | - | 입력을 읽는 방법을 지정하는 널 종료 와이드 문자열을 가리키는 포인터 |
| ... | - | 수신 인수. |
format 문자열은 다음으로 구성됩니다:
- 공백이 아닌 와이드 문자 (
%제외): 형식 문자열의 각 문자는 입력 스트림에서 정확히 하나의 동일한 문자를 소비하거나, 스트림의 다음 문자가 같지 않으면 함수가 실패합니다. - 공백 문자: 형식 문자열의 단일 공백 문자는 입력에서 사용 가능한 연속된 모든 공백 문자를 소비합니다 (iswspace를 루프에서 호출하는 것처럼 결정됨). 형식 문자열에서
"\n"," ","\t\t"또는 기타 공백 문자 간에 차이가 없습니다. - 변환 지정. 각 변환 지정은 다음 형식을 가집니다:
- 도입
%문자.
- 도입
- (선택 사항) 할당 억제 문자
*. 이 옵션이 있으면 함수는 변환 결과를 수신 인수에 할당하지 않습니다.
- (선택 사항) 할당 억제 문자
- (선택 사항) 최대 필드 폭을 지정하는 정수 (0보다 큼), 즉 함수가 현재 변환 지정에 의해 지정된 변환을 수행할 때 소비할 수 있는 최대 문자 수입니다. 폭을 제공하지 않으면
%s와%[가 버퍼 오버플로를 일으킬 수 있습니다.
- (선택 사항) 최대 필드 폭을 지정하는 정수 (0보다 큼), 즉 함수가 현재 변환 지정에 의해 지정된 변환을 수행할 때 소비할 수 있는 최대 문자 수입니다. 폭을 제공하지 않으면
- (선택 사항) 수신 인수의 크기, 즉 실제 대상 유형을 지정하는 길이 수정자
- 입니다. 이는 변환 정확도와 오버플로 규칙에 영향을 줍니다. 기본 대상 유형은 각 변환 유형에 따라 다릅니다 (아래 표 참조).
변환 형식 지정자.
| 다음 형식 지정자를 사용할 수 있습니다:
변환 |
지정자 | 설명
예상되는 | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| 인수 유형 | hh
|
h
|
길이 수정자 → | l
|
ll
|
j
|
z
|
t
|
L
| |
| 없음 | C99부터만 사용 가능 → | 예 | 예 | 예 | 예 | |||||
%
|
리터럴
%와 일치합니다. |
N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A |
c
|
문자 또는 문자 시퀀스와 일치합니다.
|
N/A | N/A | char* |
wchar_t* |
N/A | N/A | N/A | N/A | N/A |
s
|
공백이 아닌 문자 시퀀스 (문자열)와 일치합니다.
| |||||||||
[집합 ]
|
set 문자 집합의 비어 있지 않은 시퀀스와 일치합니다.
| |||||||||
d
|
10진 정수와 일치합니다.
|
signed char* 또는 unsigned char* |
signed short* 또는 unsigned short* |
signed int* 또는 unsigned int* |
signed long* 또는 unsigned long* |
signed long long* 또는 unsigned long long* |
intmax_t* 또는 uintmax_t* |
size_t* |
ptrdiff_t* |
N/A |
b (C23)
|
부호 없는 2진 정수와 일치합니다.
| |||||||||
i
|
정수와 일치합니다.
| |||||||||
u
|
부호 없는 10진 정수와 일치합니다.
| |||||||||
o
|
부호 없는 8진 정수와 일치합니다.
| |||||||||
xX
|
부호 없는 16진 정수와 일치합니다.
| |||||||||
n
|
지금까지 읽은 문자 수를 반환합니다.
| |||||||||
a (C99)A (C99)eEfF (C99)gG
|
부동 소수점 숫자와 일치합니다.
|
N/A | N/A | float* |
double* |
N/A | N/A | N/A | N/A | long double* |
p
|
포인터를 정의하는 구현 정의 문자 시퀀스와 일치합니다.
|
N/A | N/A | void** |
N/A | N/A | N/A | N/A | N/A | N/A |
| 참고 | ||||||||||
|
길이 지정자 변환 지정자 고정 폭 정수 유형 (int8_t 등)에 대한 올바른 변환 지정은 헤더 <inttypes.h>에 정의되어 있습니다 (물론 SCNdMAX, SCNuMAX 등은 각 변환 지정자의 동작 후에는 시퀀스 포인트가 있습니다. 이를 통해 여러 필드를 동일한 "싱크" 변수에 저장할 수 있습니다. 변환 지정자 변환 지정이 유효하지 않으면 동작이 정의되지 않습니다. | ||||||||||
반환값
예제
#include <stdio.h>
#include <string.h>
#include <wchar.h>
#define NUM_VARS 3
#define ERR_READ 2
#define ERR_WRITE 3
int main(void)
{
wchar_t state[64];
wchar_t capital[64];
unsigned int population = 0;
int elevation = 0;
int age = 0;
float pi = 0;
#if INTERACTIVE_MODE
wprintf(L"Enter state, age, and pi value: ");
if (wscanf(L"%ls%d%f", state, &age, &pi) != NUM_VARS)
{
fprintf(stderr, "Error reading input.\n");
return ERR_READ;
}
#else
wchar_t* input = L"California 170 3.141592";
if (swscanf(input, L"%ls%d%f", state, &age, &pi) != NUM_VARS)
{
fprintf(stderr, "Error reading input.\n");
return ERR_READ;
}
#endif
wprintf(L"State: %ls\nAge : %d years\nPi : %.5f\n\n", state, age, pi);
FILE* fp = tmpfile();
if (fp)
{
// write some data to temp file
if (!fwprintf(fp, L"Mississippi Jackson 420000 807"))
{
fprintf(stderr, "Error writing to file.\n");
fclose(fp);
return ERR_WRITE;
}
// rewind file pointer
rewind(fp);
// read data into variables
fwscanf(fp, L"%ls%ls%u%d", state, capital, &population, &elevation);
wprintf(L"State : %ls\nCapital: %ls\nJackson population (in 2020): %u\n"
L"Highest elevation: %dft\n",
state, capital, population, elevation);
fclose(fp);
}
}
가능한 출력:
State: California
Age : 170 years
Pi : 3.14159
State : Mississippi
Capital: Jackson
Jackson population (in 2020): 420000
Highest elevation: 807ft
참조
- C23 표준 (ISO/IEC 9899:2024):
- 7.29.2.2 fwscanf 함수 (p: TBD)
- 7.29.2.4 swscanf 함수 (p: TBD)
- 7.29.2.12 wscanf 함수 (p: TBD)
- K.3.9.1.2 fwscanf_s 함수 (p: TBD)
- K.3.9.1.5 swscanf_s 함수 (p: TBD)
- K.3.9.1.14 wscanf_s 함수 (p: TBD)
- C17 표준 (ISO/IEC 9899:2018):
- 7.29.2.2 fwscanf 함수 (p: TBD)
- 7.29.2.4 swscanf 함수 (p: TBD)
- 7.29.2.12 wscanf 함수 (p: TBD)
- K.3.9.1.2 fwscanf_s 함수 (p: TBD)
- K.3.9.1.5 swscanf_s 함수 (p: TBD)
- K.3.9.1.14 wscanf_s 함수 (p: TBD)
- C11 표준 (ISO/IEC 9899:2011):
- 7.29.2.2 fwscanf 함수 (p: 410-416)
- 7.29.2.4 swscanf 함수 (p: 417)
- 7.29.2.12 wscanf 함수 (p: 421)
- K.3.9.1.2 fwscanf_s 함수 (p: 628-629)
- K.3.9.1.5 swscanf_s 함수 (p: 631)
- K.3.9.1.14 wscanf_s 함수 (p: 638)
- C99 표준 (ISO/IEC 9899:1999):
- 7.24.2.2 fwscanf 함수 (p: 356-362)
- 7.24.2.4 swscanf 함수 (p: 362)
- 7.24.2.12 wscanf 함수 (p: 366-367)
같이 보기
(C99)(C99)(C99)(C11)(C11)(C11) |
stdin, 파일 스트림 또는 버퍼에서 가변 인수 목록을 사용하여 형식화된 와이드 문자 입력을 읽습니다 (함수) |
C++ 문서 for wscanf, fwscanf, swscanf
| |