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