SystemTimeToVariantTime中发生缓冲区溢出

时间:2018-05-01 22:34:07

标签: c++ buffer buffer-overrun

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但没有一个工作,缓冲区溢出问题仍然存在。 如何解决这个问题?

enter image description here

1 个答案:

答案 0 :(得分:1)

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

相关问题