缓冲区溢出发生在 SystemTimeToVariantTime
buffer overrun happens in SystemTimeToVariantTime
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
类型。
但是,当我 运行 这部分代码时,当调试器离开此函数范围时,它总是抛出异常说 "buffer overrun" 。
我还尝试将其更改为 void ConvertDateIntoSystemFormat(std::wstring dateModified,DATE* date)
并尝试在将其传递给此函数时为日期分配内存,或尝试使用 LPSYSTEMTIME
而不是 SYSTEMTIME
,或尝试使用 DATE ConvertDateIntoSystemFormat(std::wstring dateModified)
声明DATE date
在函数内部,但其中 none 有效,缓冲区溢出 运行 问题仍然存在。
如何解决这个问题?
所有 SYSTEMTIME
字段都具有 WORD
类型(又名 short
),而格式 %d
需要一个指向 int
的指针。使用 %hd
.
修复格式字符串
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
类型。
但是,当我 运行 这部分代码时,当调试器离开此函数范围时,它总是抛出异常说 "buffer overrun" 。
我还尝试将其更改为 void ConvertDateIntoSystemFormat(std::wstring dateModified,DATE* date)
并尝试在将其传递给此函数时为日期分配内存,或尝试使用 LPSYSTEMTIME
而不是 SYSTEMTIME
,或尝试使用 DATE ConvertDateIntoSystemFormat(std::wstring dateModified)
声明DATE date
在函数内部,但其中 none 有效,缓冲区溢出 运行 问题仍然存在。
如何解决这个问题?
所有 SYSTEMTIME
字段都具有 WORD
类型(又名 short
),而格式 %d
需要一个指向 int
的指针。使用 %hd
.