2013-02-25 78 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’使用」