%>
将当前系统日期复制到缓冲区。 这些函数的版本是 _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
的参数和返回值都是宽字符字符串。 否则这些函数具有相同行为。
当 buffer
为 NULL
指针或 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
的示例。