1

私は C プログラムに不慣れで、mktime 関数を使用してプログラムをコーディングするときに問題が発生しました。

私は2つの時間を宣言します。最初の時間はシステム時間で、2番目の時間はその1日前です。これが私のコードです:

struct tm *now = calloc(1,sizeof(struct tm));
struct tm *dayb4 = calloc(1,sizeof(struct tm));
time_t t1 = time(NULL);

now = localtime(&t1);
dayb4 = localtime(&t1);

dayb4->tm_day -= 1;
mktime(dayb4);

しかし、「今」と「dayb4」の時刻が同じで、現在時刻の 1 日前であることがわかりました...どこが間違っているのか教えてもらえますか?

どうもありがとうございます !!!

4

2 に答える 2

1

戻り値を更新すると問題が発生します。localtime()次を使用する必要がありますlocaltime_r()

struct tm *localtime(const time_t *timep);

localtime() の戻り値は、静的に割り当てられた構造体を指します。この構造体は、以降の日付および時刻関数の呼び出しによって上書きされる可能性があります。

struct tm *localtime_r(const time_t *timep, struct tm *result);

ユーザー指定のlocaltime_r()構造体にデータを格納します。

あなたの例では、次のようになります。

dayb4 = localtime_r(&t1, dayb4);
于 2013-05-10T09:43:33.220 に答える