调用"localtime_s"时日历函数崩溃
Calendar function crashes when invoking 'localtime_s'
我正在尝试创建一个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\locatim64.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,&now(;*的结果在日历中:Initialize((我是否可以使用此功能的弃用版本?我知道还有其他函数可以获取localtime,但我不知道哪一个是"合适的"函数。其他人建议我不应该使用"localtime",但localtime_s似乎也不起作用。
请参阅文档
参数
_tm
指向要填写的时间结构的指针。
这意味着函数期望第一个参数是指向有效tm
实例的非null指针。
更改
tm *localTime = null;
localtime_s(localTime, &now);
至
tm localTime;
localtime_s(&localTime, &now);
localtime_s
函数需要一个已分配的struct tm
指针,而您则向它传递一个空指针。
使用例如
tm localTime:
localtime_s(&localTime, &now);
ha!
#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'">
相关文章:
- "error: no matching function for call to"构造函数错误
- 什么时候调用组成单元对象的析构函数
- 继承函数的重载解析
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- C++模板来检查友元函数的存在
- 递归函数计算序列中的平方和(并输出过程)
- 对RValue对象调用的LValue ref限定成员函数
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 为什么使用 "this" 指针调用派生成员函数?
- 将对象数组的引用传递给函数
- 函数调用中参数的顺序重要吗
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用不带参数的函数访问结构元素
- 代码在main()中运行,但在函数中出现错误
- 内置函数可查看CPP中的成员变量
- 如何获取std::result_of函数的返回类型
- C++日历(无法获取变量的值以返回到主函数)
- 调用"localtime_s"时日历函数崩溃