1

カレンダーを作成しようとしているので、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)

失敗したassertメッセージを閉じると、次の行で標準のデバッグエラーが発生します。

static __inline errno_t __CRTDECL localtime_s(struct tm * _Tm, const time_t * _Time)
{
    return _localtime64_s(_Tm, _Time);
}

これは基本的に、 Calendar:Initialize()で* localtime_s(localTime、&now); *を呼び出した結果です。 この機能の非推奨バージョンを使用できますか?ローカル時間を取得する他の関数があることは知っていますが、どれかわかりませんは「適切な」ものです。他の人は、「localtime」を使用すべきではないと私に提案しましたが、localtime_sも機能していないようです。

4

4 に答える 4

5

ドキュメントを参照してください

パラメーター

_tm

記入する時間構造へのポインタ。

これは、関数が最初のパラメーターが有効なtmインスタンスへのnull以外のポインターであることを期待していることを意味します。

変化する

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

tm localTime;
localtime_s(&localTime, &now);
于 2013-02-25T07:10:36.497 に答える
2

関数はlocaltime_s割り当てられたstruct tmポインターを必要としますが、null ポインターを渡します。

使用例

tm localTime:
localtime_s(&localTime, &now);
于 2013-02-25T07:11:08.637 に答える
1

ハ!

#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;

}
于 2013-06-05T00:21:58.530 に答える
1

最近、たまたま同じ問題に対処していました。コンパイラのエラー/警告も回避するために、次のことをお勧めします。

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

初期化しないlocalTimeと、「エラー C4700: 初期化されていないローカル変数 'localTime' が使用されました」というメッセージが表示されます。

于 2016-03-30T19:44:13.397 に答える