【问题标题】:buffer overrun happens in SystemTimeToVariantTime缓冲区溢出发生在 SystemTimeToVariantTime
【发布时间】:2018-05-01 22:34:06
【问题描述】:
void ConvertDateIntoSystemFormat(std::wstring dateModified,DATE& date)
{
SYSTEMTIME systemTime;

memset(&systemTime, 0, sizeof(systemTime));

sscanf_s(ConvertWstringToCharStar(dateModified), "%d-%d-%dT%d:%d:%d.%dZ",
    &systemTime.wYear, &systemTime.wMonth, &systemTime.wDay, &systemTime.wHour, &systemTime.wMinute, &systemTime.wSecond, &systemTime.wMilliseconds);

SystemTimeToVariantTime(&systemTime, &date);
}

这是我的代码。它将包含日期和时间的 wstring 转换为DATE 类型。 但是,当我运行这部分代码时,当调试器离开此函数范围时,它总是抛出异常,说“缓冲区溢出”。 我还尝试将其更改为void ConvertDateIntoSystemFormat(std::wstring dateModified,DATE* date) 并尝试在将其传递给此函数时为日期分配内存或尝试使用LPSYSTEMTIME 而不是SYSTEMTIME,或尝试DATE ConvertDateIntoSystemFormat(std::wstring dateModified) 在函数内部声明DATE date 但没有它们中的一个有效,缓冲区溢出问题仍然存在。 如何解决这个问题?

【问题讨论】:

    标签: c++ buffer buffer-overrun


    【解决方案1】:

    所有SYSTEMTIME 字段都有WORD 类型(又名short),而格式%d 需要一个指向int 的指针。使用%hd 修复格式字符串。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-15
      • 1970-01-01
      • 1970-01-01
      • 2015-12-16
      • 1970-01-01
      • 2010-11-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多