2013-02-25 75 views
0

我试图做一个卡伦德,所以我使用的time_t和localtime_s存储时间和日期信息,然后将其存储在日历类的单个成员:日历功能崩溃“localtime_s”

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:\用户\ MYPC \桌面\框架\框架\调试\ 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,&现在); *在日历:初始化() 我可能使用这个功能的一个弃用版本吗?我知道还有其他的功能来获取本地时间,但我不知道哪个是“正确的”。已经向我建议我不应该使用'localtime',但看似localtime_s也不行。

回答

5

请参阅documentation

参数

_tm

指向时间结构来填写。

表示函数期望第一个参数是非空指针,指向有效的tm实例

变化

tm *localTime = null; 
localtime_s(localTime, &now); 

tm localTime; 
localtime_s(&localTime, &now); 
2

localtime_s功能要分配的struct tm指针,而你传递一个空指针。

使用例如

tm localTime: 
localtime_s(&localTime, &now); 
1

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; 

} 
0

最近发生了同样的问题。为了避免编译器错误/警告,以及,我提出以下建议:

tm *localTime = new tm(); 
localtime_s(localTime, &now); 

如果你不初始化localTime你会得到一个“错误C4700:未初始化的局部变量‘LOCALTIME’使用”