Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Считывают форматированные данные из строки. Доступны более безопасные версии этих функций; см. , 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_lfwscanf_fwscanf_l
scanf, , _scanf_lwscanf_wscanf_l
sprintf, , _sprintf_lswprintf, _swprintf_l__swprintf_l
snprintf, , _snprintf_snprintf_l, _snwprintf_snwprintf_l