vwscanf, vfwscanf, vswscanf, vwscanf_s, vfwscanf_s, vswscanf_s
| Определено в заголовке <wchar.h>
|
||
int vwscanf( const wchar_t *restrict format, va_list vlist );
|
(1) | (начиная с C99) |
int vfwscanf( FILE *restrict stream,
const wchar_t *restrict format, va_list vlist );
|
(2) | (начиная с C99) |
int vswscanf( const wchar_t *restrict buffer,
const wchar_t *restrict format, va_list vlist );
|
(3) | (начиная с C99) |
int vwscanf_s( const wchar_t *restrict format, va_list vlist );
|
(4) | (начиная с C11) |
int vfwscanf_s( FILE *restrict stream,
const wchar_t *restrict format, va_list vlist );
|
(5) | (начиная с C11) |
int vswscanf_s( const wchar_t *restrict buffer,
const wchar_t *restrict format, va_list vlist );
|
(6) | (начиная с C11) |
Читает данные из различных источников, интерпретирует их в соответствии с format и сохраняет результаты в места, определённые через vlist.
stream.buffer. Достижение конца строки эквивалентно достижению условия конца файла для fwscanf%c, %s и %[ ожидают по два аргумента (обычный указатель и значение типа rsize_t, указывающее размер принимающего массива, которое может быть равно 1 при чтении с %lc в одиночный широкий символ), а также следующих ошибок, обнаруживаемых во время выполнения и вызывающих установленную в данный момент функцию обработчика ограничений:
- любой из аргументов указательного типа является нулевым указателем
format,streamилиbufferявляется нулевым указателем- количество символов, которое было бы записано с помощью %c, %s или %[, плюс завершающий нуль-символ, превысило бы второй аргумент (rsize_t), предоставленный для каждого из этих спецификаторов преобразования
- дополнительно, любая другая обнаруживаемая ошибка, например, неизвестный спецификатор преобразования
- Как и все функции с проверкой границ,
vwscanf_s,vfwscanf_sиvswscanf_sгарантированно доступны только в том случае, если__STDC_LIB_EXT1__определена реализацией и если пользователь определяет__STDC_WANT_LIB_EXT1__как целочисленную константу1перед включением <stdio.h>.
Параметры
| stream | - | входной файловый поток для чтения |
| buffer | - | указатель на нуль-терминированную широкую строку для чтения |
| format | - | указатель на нуль-терминированную широкую строку, задающую способ чтения ввода |
| vlist | - | список аргументов переменной длины, содержащий принимающие аргументы. |
Строка format состоит из
- непробельных широких символов, кроме
%: каждый такой символ в строке формата потребляет ровно один идентичный символ из входного потока или вызывает сбой функции, если следующий символ в потоке не равен ему. - пробельных символов: любой одиночный пробельный символ в строке формата потребляет все доступные последовательные пробельные символы из ввода (определяется как при вызове iswspace в цикле). Обратите внимание, что нет различия между
"\n"," ","\t\t"или другими пробельными символами в строке формата. - спецификаций преобразования. Каждая спецификация преобразования имеет следующий формат:
- вводный символ
%.
- вводный символ
- (необязательно) символ подавления присваивания
*. Если эта опция присутствует, функция не присваивает результат преобразования никакому принимающему аргументу.
- (необязательно) символ подавления присваивания
- (необязательно) целое число (больше нуля), которое задаёт максимальную ширину поля, то есть максимальное количество символов, которое функция может потребить при выполнении преобразования, указанного текущей спецификацией преобразования. Обратите внимание, что
%sи%[могут привести к переполнению буфера, если ширина не указана.
- (необязательно) целое число (больше нуля), которое задаёт максимальную ширину поля, то есть максимальное количество символов, которое функция может потребить при выполнении преобразования, указанного текущей спецификацией преобразования. Обратите внимание, что
- (необязательно) модификатор длины, который задаёт размер принимающего аргумента, то есть фактический тип назначения. Это влияет на точность преобразования и правила переполнения. Тип назначения по умолчанию различается для каждого типа преобразования (см. таблицу ниже).
- спецификатор формата преобразования.
Доступны следующие спецификаторы формата:
| Спецификатор преобразования |
Пояснение | Ожидаемый Тип аргумента | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Модификатор длины→ | hh
|
h
|
нет | l
|
ll
|
j
|
z
|
t
|
L
| |
| Доступно только начиная с C99→ | Да | Да | Да | Да | Да | |||||
%
|
Соответствует литералу
%. |
Н/Д | Н/Д | Н/Д | Н/Д | Н/Д | Н/Д | Н/Д | Н/Д | Н/Д |
c
|
Соответствует символу или последовательности символов.
|
Н/Д | Н/Д | char* |
wchar_t* |
Н/Д | Н/Д | Н/Д | Н/Д | Н/Д |
s
|
Соответствует последовательности непробельных символов (строке).
| |||||||||
[набор ]
|
Соответствует непустой последовательности символов из набора символов.
| |||||||||
d
|
Соответствует десятичному целому числу.
|
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* |
Н/Д |
b (C23)
|
Соответствует беззнаковому двоичному целому числу.
| |||||||||
i
|
Соответствует целому числу.
| |||||||||
u
|
Соответствует беззнаковому десятичному целому числу.
| |||||||||
o
|
Соответствует беззнаковому восьмеричному целому числу.
| |||||||||
xX
|
Соответствует беззнаковому шестнадцатеричному целому числу.
| |||||||||
n
|
Возвращает количество прочитанных до сих пор символов.
| |||||||||
a (C99)A (C99)eEfF (C99)gG
|
Соответствует числу с плавающей точкой.
|
Н/Д | Н/Д | float* |
double* |
Н/Д | Н/Д | Н/Д | Н/Д | long double* |
p
|
Соответствует последовательности символов, определяемой реализацией, задающей указатель.
|
. | Н/Д | void** |
Н/Д | Н/Д | Н/Д | Н/Д | Н/Д | Н/Д |
| Примечания | ||||||||||
|
Для каждого спецификатора преобразования, кроме За исключением спецификатора Все спецификаторы преобразования, кроме Если спецификатор длины Спецификаторы преобразования Правильные спецификации преобразования для целочисленных типов фиксированной ширины (int8_t и т.д.) определены в заголовке <inttypes.h> (хотя SCNdMAX, SCNuMAX и т.д. являются синонимами Существует точка последовательности после действия каждого спецификатора преобразования; это позволяет хранить несколько полей в одной и той же «принимающей» переменной. При разборе неполного значения с плавающей точкой, которое заканчивается показателем степени без цифр, например, при разборе Если спецификация преобразования недопустима, поведение не определено. | ||||||||||
Возвращаемое значение
Примечания
Все эти функции могут вызывать va_arg, значение arg не определено после возврата. Эти функции не вызывают va_end, и это должно быть сделано вызывающей стороной.
Пример
| Этот раздел неполон Причина: нет примера |
Ссылки
- Стандарт C11 (ISO/IEC 9899:2011):
- 7.29.2.6 Функция vfwscanf (стр. 418)
- 7.29.2.8 Функция vswscanf (стр. 419)
- 7.29.2.10 Функция vwscanf (стр. 420)
- K.3.9.1.7 Функция vfwscanf_s (стр. 632-633)
- K.3.9.1.10 Функция vswscanf_s (стр. 635-636)
- K.3.9.1.12 Функция vwscanf_s (стр. 637)
- Стандарт C99 (ISO/IEC 9899:1999):
- 7.24.2.6 Функция vfwscanf (стр. 364)
- 7.24.2.8 Функция vswscanf (стр. 365)
- 7.24.2.10 Функция vwscanf (стр. 366)
См. также
(C95)(C95)(C95)(C11)(C11)(C11) |
читает форматированный широкий символьный ввод из stdin, файлового потока или буфера (функция) |
Документация C++ для vwscanf, vfwscanf, vswscanf
| |