Я пытаюсь сделать callendar, поэтому я использую time_t и localtime_s для хранения информации о времени и дате, а затем сохраняю ее в отдельных членах класса Calendar:
void Callendar::Initialize()
{
time_t now = time(0);
tm *localTime = null;
localtime_s(localTime, &now);
LocalSeconds = localTime->tm_sec;
LocalMinutes = localTime->tm_min;
LocalHours = localTime->tm_hour;
LocalDays = localTime->tm_mday;
LocalMonths = localTime->tm_mon;
LocalYears = localTime->tm_year;
DaysSinceSunday = localTime->tm_wday;
DaysSinceJanuaryFirst = localTime->tm_yday;
HoursDaylightSavings = localTime->tm_isdst;
}
Все компилируется нормально, однако во время выполнения я получаю:
Ошибка отладки!
Программа: C: \ Users \ MyPC \ Desktop \ Framework \ Framework \ Debug \ Framework.exe
Файл: f: \ dd \ vctools \ crt_bld \ self_x86 \ crt \ src \ loctim64.c Строка: 69Выражение: (ptm! = NULL)
После того, как я закрываю сообщение об ошибке «Утвердить», я получаю стандартную ошибку отладки в этой строке:
static __inline errno_t __CRTDECL localtime_s(struct tm * _Tm, const time_t * _Time)
{
return _localtime64_s(_Tm, _Time);
}
Что в основном является результатом вызова * localtime_s (localTime, &Сейчас в Календарь: Initialize ()
Могу ли я использовать устаревшую версию этой функции? Я знаю, что есть другие функции для получения локального времени, но я не знаю, какая из них «правильная». Другие предложили мне не использовать «местное время», но, похоже, localtime_s тоже не работает.
Посмотри пожалуйста документация
параметры
_tm
Указатель на временную структуру, которая будет заполнена.
Это означает, что функция ожидает, что первый параметр будет ненулевым указателем на действительный tm
пример.
менять
tm *localTime = null;
localtime_s(localTime, &now);
в
tm localTime;
localtime_s(&localTime, &now);
localtime_s
функция хочет выделенный struct tm
указатель, пока вы передаете ему нулевой указатель.
Используйте, например,
tm localTime:
localtime_s(&localTime, &now);
ха!
#include <iostream>
#include <fstream>
#include <ctime>
//#include <string>
//#include <cstring>
//#include <sstream>
using namespace std;
int main ()
{
int LocalSeconds, LocalMinutes, LocalHours, LocalDays, LocalMonths, LocalYears,
DaysSinceSunday, DaysSinceJanuaryFirst, HoursDaylightSavings;
time_t now = time(0);
tm localTime;
now = time(NULL);
localtime_s(&localTime, &now);LocalSeconds = (&localTime)->tm_sec;
LocalMinutes = (&localTime)->tm_min;
LocalHours = (&localTime)->tm_hour;
LocalDays = (&localTime)->tm_mday;
LocalMonths = (&localTime)->tm_mon;
LocalYears = (&localTime)->tm_year;
DaysSinceSunday = (&localTime)->tm_wday;
DaysSinceJanuaryFirst = (&localTime)->tm_yday;
HoursDaylightSavings = (&localTime)->tm_isdst;
cout << LocalSeconds << " " << LocalMinutes<< " " << LocalHours<< " " << LocalDays
<< " " << LocalMonths<< " " << LocalYears<< " " <<endl;
return 0;
}
В последнее время случается с той же проблемой. Чтобы избежать ошибок / предупреждений компилятора, я рекомендую следующее:
tm *localTime = new tm();
localtime_s(localTime, &now);
Если вы не инициализируете localTime
вы получите «ошибку C4700: неинициализированная локальная переменная localTime используется»