假设我有两个有效的time_t变量(称为time1,time2),不同的日期。
我创建:
struct tm *time1_info = localtime(&time1);
struct tm *time2_info = localtime(&time2);
当我尝试打印time1和time2变量的月份时:
printf("Time1 month %i and time2 month %i\n", time1_info->tm_mon, time2_info->tm_mon);
它为time2
月份值time1
提供给我,但我确信它们彼此不同。例如,如果time1
的月份为4且time2
的月份为7,则会打印出来:
Time1 month 7 and time2 month 7
为什么要这样做?
答案 0 :(得分:2)
localtime
函数返回一个指向静态对象的指针,再次调用它可能会覆盖数据然后返回相同的指针。如果检查两个返回指针的值,您可能会看到它们指向同一个位置。
在再次调用localtime
之前,您应该从返回的指针中获取所需的数据:
struct tm *time_info = localtime(&time1);
month1 = time_info->tm_mon;
time_info = localtime(&time2);
month2 = time_info->tm_mon;
某些系统具有localtime_r
功能,可让您指定存储数据的位置,而不是始终使用相同的存储,但这不是标准C功能。 C11标准添加了一个可选的支持函数localtime_s
。