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.
stdin.stream.buffer. Достижение конца строки эквивалентно достижению условия конца файла для fwscanf
%c, %s и %[ каждый требуют два аргумента (обычный указатель и значение типа rsize_t, указывающее размер принимающего массива; при чтении с помощью %lc в один широкий символ размер может быть равен 1), а также за исключением того, что во время выполнения обнаруживаются следующие ошибки и вызывается установленная в данный момент функция обработчика ограничений: - любой аргумент указательного типа является нулевым указателем
-
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 | Совпадает с десятичным целым числом.
|
signedchar* or unsignedchar*
|
signedshort* or unsignedshort*
|
signedint* or unsignedint*
|
signedlong* or unsignedlong*
|
signedlonglong* or unsignedlonglong*
|
intmax_t* or uintmax_t*
|
size_t*
|
ptrdiff_t*
| Н/Д |
b (C23) | Совпадает с беззнаковым двоичным целым числом.
|
|||||||||
i | Совпадает с целым числом.
|
|||||||||
u | Совпадает с беззнаковым десятичным целым числом.
|
|||||||||
o | Совпадает с беззнаковым восьмеричным целым числом.
|
|||||||||
xX | Совпадает с беззнаковым шестнадцатеричным целым числом.
|
|||||||||
n | Возвращает количество уже прочитанных символов.
|
|||||||||
a (C99)A (C99)eEfF (C99)gG | Совпадает с числом с плавающей точкой.
| Н/Д | Н/Д |
float*
|
double*
| Н/Д | Н/Д | Н/Д | Н/Д |
longdouble*
|
p | Совпадает с определяемой реализацией последовательностью символов, задающей указатель.
| Н/Д | Н/Д |
void**
| Н/Д | Н/Д | Н/Д | Н/Д | Н/Д | Н/Д |
| Примечания | ||||||||||
| Для каждого спецификатора преобразования, кроме За исключением спецификатора Все спецификаторы преобразования, кроме Если модификатор длины Спецификаторы преобразования Правильные спецификации преобразования для целочисленных типов фиксированной ширины ( После выполнения каждого спецификатора преобразования возникает точка следования; это позволяет сохранять несколько полей в одной и той же переменной-приёмнике. При разборе неполного числа с плавающей точкой, заканчивающегося показателем степени без цифр, например при разборе Если спецификация преобразования недопустима, поведение не определено. |
||||||||||
Возвращаемое значение
EOF, если ошибка чтения произошла до присваивания первого принимающего аргумента.EOF.Примечания
Все эти функции могут вызывать 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 |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/c/io/vfwscanf