sscanf, _sscanf_l, swscanf, _swscanf_l

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

Синтаксис

int sscanf(
   const char *buffer,
   const char *format [,
   argument ] ...
);
int _sscanf_l(
   const char *buffer,
   const char *format,
   _locale_t locale [,
   argument ] ...
);
int swscanf(
   const wchar_t *buffer,
   const wchar_t *format [,
   argument ] ...
);
int _swscanf_l(
   const wchar_t *buffer,
   const wchar_t *format,
   _locale_t locale [,
   argument ] ...
);

Параметры

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

format
Строка управления форматом. Дополнительные сведения см. в разделе "Синтаксис спецификации формата".

argument
Необязательные аргументы

locale
Используемый языковой стандарт

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

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

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

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

Замечания

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

Сведения о символах полей типа scanf см. в разделе scanf "Символы полей типа". Сведения о полях спецификации формата scanf см. в разделе "Поля спецификации форматирования".

Важно!

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

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

Версии этих функций с суффиксом _l идентичны за исключением того, что они используют переданный параметр языкового стандарта вместо языкового стандарта текущего потока.

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

TCHAR.H Обычной _UNICODE и _MBCS не определен _MBCS Определенные _UNICODE Определенные
_stscanf sscanf sscanf swscanf
_stscanf_l _sscanf_l _sscanf_l _swscanf_l

Требования

Маршрут Обязательный заголовок
sscanf, _sscanf_l <stdio.h>
swscanf, _swscanf_l <stdio.h> или <wchar.h>

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

Пример

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

#include <stdio.h>

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:
   sscanf( tokenstring, "%80s", s ); // C4996
   sscanf( tokenstring, "%c", &c );  // C4996
   sscanf( tokenstring, "%d", &i );  // C4996
   sscanf( tokenstring, "%f", &fp ); // C4996
   // Note: sscanf is deprecated; consider using sscanf_s instead

   // 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

См. также

Потоковый ввод-вывод
fscanf, _fscanf_l, fwscanf, _fwscanf_l
scanf, _scanf_l, wscanf, _wscanf_l
sprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l
snprintf, _snprintf, _snprintf_l, _snwprintf, _snwprintf_l