1

我是 C 程序的新手,当我使用 mktime 函数编写程序时遇到了一些问题。

我声明了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 回答
1

您可以执行以下操作,而不是 calloc 和重叠结构:

struct tm now;
struct tm dayb4;
time_t t1 = time(NULL);

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

dayb4.tm_day -= 1;
mktime(&dayb4);
于 2013-05-10T12:04:33.557 回答