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


_strtime_s, _wstrtime_s

Скопировать текущее время в буфер. Здесь представлены версии _strtime, _wstrtime с усовершенствованной безопасностью, как описано в разделе Функции безопасности в CRT.

errno_t _strtime_s(
   char *buffer,
   size_t numberOfElements
);
errno_t _wstrtime_s(
   wchar_t *buffer,
   size_t numberOfElements
);
template <size_t size>
errno_t _strtime_s(
   char (&buffer)[size]
); // C++ only
template <size_t size>
errno_t _wstrtime_s(
   wchar_t (&buffer)[size]
); // C++ only

Параметры

  • [исходящий] buffer
    Буфер, по крайней мере 10 байтов длиной, где будет записано время.

  • [входящий] numberOfElements
    Размер буфера.

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

Ноль, если успешно.

Если возникает ошибочное условие, то вызывается обработчик недопустимого параметра, как описано в Проверка параметров. Возвращаемое значение — код ошибки в случае сбоя. Коды ошибок определенны в ERRNO.H; см. следующую таблицу для конкретных ошибок, создаваемых этой функцией. Дополнительные сведения о кодах ошибок см. в разделе Константы errno.

Условия возникновения ошибки

buffer

numberOfElements

Return

Содержимое buffer.

NULL

(any)

EINVAL

Без изменений

Не NULL (указывающий на допустимый буфер)

0

EINVAL

Без изменений

Не NULL (указывающий на допустимый буфер)

0 < size < 9

EINVAL

Пустая строка

Не NULL (указывающий на допустимый буфер)

Size > 9

0

Текущее время, отформатированное в соответствии с замечаниями

Проблемы безопасности

Передача недопустимого, отличного от NULL значения для буфера приведет к нарушению прав доступа, если параметр numberOfElements больше 9.

Передача для numberOfElements значения, превышающего фактический размер буфера, может привести к переполнению буфера.

Заметки

Эти функции предоставляют более безопасные версии _strtime и _wstrtime. Функция _strtime_s копирует текущее местное время в буфер, указанный в timestr*.* Время форматируется как hh:mm:ss, где hh является двумя цифрами, представляющими час в 24-часовой записи, mm является двумя цифрами, представляющими минуты, прошедшие с последнего часа, и ss является двумя цифрами, представляющими секунды. Например, строка 18:23:44 представляет 23 минуты и 44 секунды, прошедших с 18 часов. Буфер должен быть длиной, по крайней мере, 9 байт; фактический размер указывается в качестве второго параметра.

_wstrtime — это двухбайтовая версия функции _strtime; аргумент и возвращаемое значение _wstrtime являются строками двухбайтовых символов. В остальном эти функции ведут себя идентично.

В C++ использование данных функций упрощено наличием шаблонных перегрузок; перегруженные методы могут автоматически определять длину буфера (что исключает необходимость указания аргумента с размером буфера), а также они могут автоматически заменять более старые, незащищенные функции их новыми безопасными аналогами. Дополнительные сведения см. в разделе Безопасные перегрузки шаблонов.

Универсальное текстовое сопоставление функций:

Подпрограмма TCHAR.H

_UNICODE & _MBCS не определены

_MBCS определено

_UNICODE определено

_tstrtime_s

_strtime_s

_strtime_s

_wstrtime_s

Требования

Подпрограмма

Обязательный заголовок

_strtime_s

<time.h>

_wstrtime_s

<time.h> или <wchar.h>

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

Пример

// strtime_s.c

#include <time.h>
#include <stdio.h>

int main()
{
    char tmpbuf[9];
    errno_t err;

    // Set time zone from TZ environment variable. If TZ is not set,
    // the operating system is queried to obtain the default value 
    // for the variable. 
    //
    _tzset();

    // Display operating system-style date and time. 
    err = _strtime_s( tmpbuf, 9 );
    if (err)
    {
       printf("_strdate_s failed due to an invalid argument.");
      exit(1);
    }
    printf( "OS time:\t\t\t\t%s\n", tmpbuf );
    err = _strdate_s( tmpbuf, 9 );
    if (err)
    {
       printf("_strdate_s failed due to an invalid argument.");
       exit(1);
    }
    printf( "OS date:\t\t\t\t%s\n", tmpbuf );

}
  

Эквивалент в .NET Framework

См. также

Ссылки

Управление временем

asctime_s, _wasctime_s

ctime_s, _ctime32_s, _ctime64_s, _wctime_s, _wctime32_s, _wctime64_s

gmtime_s, _gmtime32_s, _gmtime64_s

localtime_s, _localtime32_s, _localtime64_s

mktime, _mktime32, _mktime64

time, _time32, _time64

_tzset