You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SystemTimeToTzSpecificLocalTime能否复用同一SYSTEMTIME指针作为输入输出?

关于SystemTimeToTzSpecificLocalTime复用输入输出指针的安全性问题

函数原型

BOOL SystemTimeToTzSpecificLocalTime(
  [in, optional] const TIME_ZONE_INFORMATION *lpTimeZoneInformation,
  [in]           const SYSTEMTIME            *lpUniversalTime,
  [out]          LPSYSTEMTIME                lpLocalTime
);

从静态类型检查角度,第二个(输入)和第三个(输出)参数均为SYSTEMTIME结构体指针,理论上可传入同一指针实现原地修改。你测试中该操作能正常运行且输出结果正确,示例代码如下:

#include <windows.h>
void main() {
    SYSTEMTIME tm;
    GetSystemTime(&tm);
    SystemTimeToTzSpecificLocalTime(NULL, &tm, &tm);
    wprintf(L"Local Time: %02d:%02d:%02d\n", tm.wHour, tm.wMinute, tm.wSecond);
}

问题解答

虽然实际测试中复用指针能正常工作,且微软官方文档未明确说明该操作的安全性,但不建议依赖这种未被文档化的行为:

  • Windows API的内部实现可能随版本更新调整,当前版本支持原地修改,未来版本可能因计算逻辑变化,出现输入数据被提前覆盖导致的错误。
  • 最安全、符合API设计规范的做法是为输出单独创建SYSTEMTIME结构体,确保输入数据在整个计算过程中保持完整。

安全写法示例:

#include <windows.h>
void main() {
    SYSTEMTIME utcTm, localTm;
    GetSystemTime(&utcTm);
    SystemTimeToTzSpecificLocalTime(NULL, &utcTm, &localTm);
    wprintf(L"Local Time: %02d:%02d:%02d\n", localTm.wHour, localTm.wMinute, localTm.wSecond);
}

内容的提问来源于stack exchange,提问作者yg-i

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 04:59:53