将当前系统日期复制到缓冲区。 这些函数的版本是 _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,则会导致访问冲突。
传递大于 size 实际大小的 buffer 值会导致缓冲区溢出。
备注
这些函数提供 _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。 如果缓冲区为 errno 或者 EINVAL 小于或等于 0,则它们会将 NULL 设置为 size。 或者,如果 errno 小于 9,则它们会将 ERANGE 设置为 size。
在 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 的示例。
另请参阅
工时管理
%>
ctime_s, _ctime32_s, _ctime64_s, _wctime_s, _wctime32_s, _wctime64_s
.- .
.- .
.- .
.- .
_tzset