переполнение буфера происходит в SystemTimeToVariantTime - PullRequest
0 голосов
/ 02 мая 2018
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);
}

Вот мой код. Он преобразует строку, содержащую дату и время, в тип DATE. Тем не менее, когда я запускаю эту часть кода, он всегда выбрасывает исключения, которые говорят «переполнение буфера», когда отладчик покидает область действия этой функции. Я также пытался изменить его на void ConvertDateIntoSystemFormat(std::wstring dateModified,DATE* date) и попытаться выделить память для даты при передаче этой функции, или попытался использовать LPSYSTEMTIME вместо SYSTEMTIME, или попытался DATE ConvertDateIntoSystemFormat(std::wstring dateModified) с объявлением DATE date внутри функции, но ни одного из них работает, проблема переполнения буфера все еще возникает. Как решить эту проблему?

enter image description here

1 Ответ

0 голосов
/ 02 мая 2018

Все поля SYSTEMTIME имеют тип WORD (он же short), в то время как формат %d ожидает указатель на int. Исправьте строку формата, используя %hd.

...