Поделиться через


vsscanf, vswscanf

Считывают форматированные данные из строки. Доступны более безопасные версии этих функций; see vsscanf_s, vswscanf_s.

Синтаксис

int vsscanf(
   const char *buffer,
   const char *format,
   va_list arglist
);
int vswscanf(
   const wchar_t *buffer,
   const wchar_t *format,
   va_list arglist
);

Параметры

buffer
Сохраненные данные

format
Строка управления форматом. Дополнительные сведения см. в полях спецификации форматирования: scanf и wscanf функций.

arglist
Список аргументов переменных.

Возвращаемое значение

Каждая из этих функций возвращает количество полей, которые успешно преобразованы и назначены. Возвращаемое значение не включает поля, которые были прочитаны, но не назначены. Возвращаемое значение 0 указывает, что поля не были назначены. Если до первого преобразования возникает ошибка или достигается конец строки, возвращается значение EOF.

Если buffer или format является NULL указателем, вызывается обработчик недопустимых параметров, как описано в разделе проверки параметров. Если разрешается продолжать выполнение, эти функции возвращают -1 и задают errno значение EINVAL.

Сведения об этих и других кодах ошибок см. в разделе errno, _doserrno_sys_errlistи _sys_nerr.

Замечания

Функция vsscanf считывает данные из buffer в расположения, указанные аргументами в списке аргументов arglist. Каждый аргумент в списке должен быть указателем на переменную, которая имеет тип, соответствующий спецификатору типа в параметре format. Аргумент format определяет интерпретацию полей входных данных и имеет такую же форму и функцию, как аргумент format для функции scanf. Если копирование производится между перекрывающимися строками, поведение не определено.

Важно!

vsscanf При чтении строки всегда указывайте ширину для формата %s (например, "%32s" вместо "%s"). В противном случае неправильно отформатированные входные данные могут привести к переполнению буфера.

vswscanf — это двухбайтовая версия vsscanf; аргументы для vswscanf представляют собой двухбайтовые строки. vsscanf не обрабатывает шестнадцатеричные шестнадцатеричные символы. vswscanf не обрабатывает шестнадцатеричные или шестнадцатеричные символы зоны совместимости Юникода. В противном случае поведение vswscanf и vsscanf идентично.

Сопоставления подпрограмм универсального текста

Подпрограмма TCHAR.H _UNICODE и _MBCS не определен _MBCS Определенные _UNICODE Определенные
_vstscanf vsscanf vsscanf vswscanf

Требования

Маршрут Обязательный заголовок
vsscanf <stdio.h>
vswscanf <stdio.h> или <wchar.h>

Дополнительные сведения о совместимости см. в разделе Совместимость.

Пример

// crt_vsscanf.c
// compile with: /W3
// This program uses vsscanf to read data items
// from a string named tokenstring, then displays them.

#include <stdio.h>
#include <stdarg.h>

int call_vsscanf(char *tokenstring, char *format, ...)
{
    int result;
    va_list arglist;
    va_start(arglist, format);
    result = vsscanf(tokenstring, format, arglist);
    va_end(arglist);
    return result;
}

int main( void )
{
    char  tokenstring[] = "15 12 14...";
    char  s[81];
    char  c;
    int   i;
    float fp;

    // Input various data from tokenstring:
    // max 80 character string:
    call_vsscanf(tokenstring, "%80s", s);
    call_vsscanf(tokenstring, "%c", &c);
    call_vsscanf(tokenstring, "%d", &i);
    call_vsscanf(tokenstring, "%f", &fp);

    // Output the data read
    printf("String    = %s\n", s);
    printf("Character = %c\n", c);
    printf("Integer:  = %d\n", i);
    printf("Real:     = %f\n", fp);
}
String    = 15
Character = 1
Integer:  = 15
Real:     = 15.000000

См. также

Потоковый ввод-вывод
scanf, _scanf_l, wscanf, _wscanf_l
sscanf, _sscanf_l, swscanf, _swscanf_l
sprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l
vsscanf_s, vswscanf_s