我是C程序的新手,当我使用mktime函数编写程序时遇到了一些问题。
我宣布2次,第一次是系统时间,第二次是前一天,这是我的代码:
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”是相同的,这是当前时间的前一天... 谁能告诉我哪个部分出错?
非常感谢!!!
答案 0 :(得分: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);
答案 1 :(得分: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);