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


_snscanf_s, _snscanf_s_l, _snwscanf_s, _snwscanf_s_l

Считывает форматированные данные указанной длины из строки. Эти функции — это версии _snscanf, _snwscanf_snscanf_lс улучшениями безопасности, _snwscanf_l как описано в функциях безопасности в CRT.

Синтаксис

int __cdecl _snscanf_s(
   const char * input,
   size_t length,
   const char * format [, argument_list]
);
int __cdecl _snscanf_s_l(
   const char * input,
   size_t length,
   const char * format,
   _locale_t locale [, argument_list]
);
int __cdecl _snwscanf_s(
   const wchar_t * input,
   size_t length,
   const wchar_t * format [, argument_list]
);
int __cdecl _snwscanf_s_l(
   const wchar_t * input,
   size_t length,
   const wchar_t * format,
   _locale_t locale [, argument_list]
);

Параметры

input
Входная строка для анализа.

length
Количество символов для анализа в строке input.

format
Один или несколько описателей формата.

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

argument_list
Необязательные аргументы, назначенные в соответствии со строкой формата.

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

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

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

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

Замечания

Эта функция похожа sscanf_s, за исключением того, что она позволяет указать фиксированное количество символов для проверки из входной строки. Дополнительные сведения см. в разделе sscanf_s, _sscanf_s_l, swscanf_s. _swscanf_s_l

Параметр размера буфера требуется с символами полей типа c, C, s, S и [. Дополнительные сведения см. в разделе Символы поля типа scanf.

Примечание.

Параметр размера имеет тип unsigned, а не size_t.

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

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

Подпрограмма Tchar.h _UNICODE и _MBCS не определен _MBCS Определенные _UNICODE Определенные
_sntscanf_s _snscanf_s _snscanf_s _snwscanf_s
_sntscanf_s_l _snscanf_s_l _snscanf_s_l _snwscanf_s_l

Требования

Маршрут Обязательный заголовок
_snscanf_s, _snscanf_s_l <stdio.h>
_snwscanf_s, _snwscanf_s_l <stdio.h> или <wchar.h>

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

Пример

// crt_snscanf_s.c
// This example scans a string of
// numbers, using both the character
// and wide character secure versions
// of the snscanf function.

#include <stdio.h>

int main( )
{
    char        str1[] = "15 12 14...";
    wchar_t     str2[] = L"15 12 14...";
    char        s1[3];
    wchar_t     s2[3];
    int         i;
    float       fp;

    i = _snscanf_s( str1, 6,  "%s %f", s1, 3, &fp);
    printf_s("_snscanf_s converted %d fields: ", i);
    printf_s("%s and %f\n", s1, fp);

    i = _snwscanf_s( str2, 6,  L"%s %f", s2, 3, &fp);
    wprintf_s(L"_snwscanf_s converted %d fields: ", i);
    wprintf_s(L"%s and %f\n", s2, fp);
}
_snscanf_s converted 2 fields: 15 and 12.000000
_snwscanf_s converted 2 fields: 15 and 12.000000

См. также

Спецификация ширины scanf