_strdate_s_wstrdate_s

将当前系统日期复制到缓冲区。 这些函数的版本是 _strdate_wstrdate,具有安全性增强功能,如 CRT 中的安全功能中所述。

语法

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

参数

buffer
指向放入格式化日期字符串的缓冲区的指针。

size
以字符为单位的缓冲区的大小。

返回值

如果成功,则返回 0。 如果失败,则返回值为错误代码。 错误代码在 ERRNO.H 中定义;有关此函数生成的确切错误,请参阅下表。 有关错误代码的详细信息,请参阅 errno

错误条件

buffer size 返回值 buffer 的内容
NULL (任意数值) EINVAL 未修改
NULL(指向有效的缓冲区) 0 EINVAL 未修改
NULL(指向有效的缓冲区) 0 <size< 9 EINVAL 空字符串
NULL(指向有效的缓冲区) size>= 9 0 注解中指定的当前日期格式

安全问题

如果为 buffer 传入无效的非 NULL 值,则如果 size 参数大于 9,则会导致访问冲突。

传递大于 buffer 实际大小的 size 值会导致缓冲区溢出。

备注

这些函数提供 _strdate_wstrdate 的更安全的版本。 _strdate_s 函数将当前系统日期复制到 buffer 指向的缓冲区。 它的格式设置为 mm/dd/yy,其中两个数字 mm 是月份,两个数字 dd 是天,最后两个数字 yy 是年份。 例如,字符串 12/05/99 表示 1999 年 12 月 5 日。 缓冲区长度必须至少为九个字符。

_wstrdate_s_strdate_s 的宽字符版本;_wstrdate_s 的参数和返回值都是宽字符字符串。 否则这些函数具有相同行为。

bufferNULL 指针或 size 少于九个字符时,将调用无效的参数处理程序。 参数验证中对此进行了介绍。 如果允许执行继续,则这些函数将返回 -1。 如果缓冲区为 NULL 或者 size 小于或等于 0,则它们会将 errno 设置为 EINVAL。 或者,如果 size 小于 9,则它们会将 errno 设置为 ERANGE

在 C++ 中,通过模板重载可简化这些函数的使用。 重载可自动推导出缓冲区的长度,不再需要指定 size 自变量。 而且,它们可以自动将非安全函数替换为对应更新、更安全的函数。 有关详细信息,请参阅安全模板重载

这些函数的调试库版本首先用 0xFE 填充缓冲区。 若要禁用此行为,请使用 _CrtSetDebugFillThreshold

默认情况下,此函数的全局状态范围限定为应用程序。 若要更改此行为,请参阅 CRT 中的全局状态

一般文本例程映射:

TCHAR.H 例程 _UNICODE_MBCS 未定义 _MBCS 已定义 _UNICODE 已定义
_tstrdate_s _strdate_s _strdate_s _wstrdate_s

要求

例程 必需的标头
_strdate <time.h>
_wstrdate <time.h> 或 <wchar.h>
_strdate_s <time.h>

示例

请参阅 time 的示例。

另请参阅

工时管理
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