我在这里有一段时间:
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
。有什么问题?难道它无法抓住你抓住它的那一刻,它会不会更新?如果是这样,我怎样才能抓住时刻,而不是像那样更新。
答案 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)
的解除引用值对其进行初始化。