c中的print struct tm问题

时间:2014-10-14 16:44:02

标签: c struct

假设我有两个有效的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

为什么要这样做?

1 个答案:

答案 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