C ++ struct tm& time_t的

时间:2016-11-27 15:04:51

标签: c++ c++11 time-t

我在这里有一段时间:

struct cl{
    unsigned char *buffer;
    time_t t = time(0);  
    struct tm * ct = localtime(&t);
};

然后:

cl sadi[10];

但是例如我在sadi[5]获得了21:58,当我在sadi[6]获得了21:59时。 然后我再次检查sadi[].ct->tm_min 59 RecyclerView。有什么问题?难道它无法抓住你抓住它的那一刻,它会不会更新?如果是这样,我怎样才能抓住时刻,而不是像那样更新。

1 个答案:

答案 0 :(得分:16)

这一行:

struct tm* ct = localtime(&t);

问题是localtime(&t)返回的指针静态内部缓冲区。因此每次调用它都会返回完全相同的指针值(地址)。这意味着所有数组元素都有指向同一struct tm对象的指针。

一种解决方案是每次拨打localtime时都会对数据进行复制

struct cl {
    unsigned char* buffer;
    time_t t = time(0);  
    struct tm ct = *localtime(&t);
};

现在我声明struct tm ct;(不是指针)并使用返回指针*localtime(&t)解除引用值对其进行初始化。