C++结构TM&time_t的
问题描述:
我的时间的阵列这里:C++结构TM&time_t的
struct cl{
unsigned char *buffer;
time_t t = time(0);
struct tm * ct = localtime(&t);
};
然后:
cl sadi[10];
但是例如我在21:58
得到sadi[5]
,并且当我在21:59
有一个sadi[6]
。 然后我再次检查我所有的sadi[].ct->tm_min
是59
。那有什么问题?它是不是抓住它的那一刻,它会一直更新吗?如果是这样,我该如何捕捉时间,而不是像那样更新。
答
这条线:
struct tm* ct = localtime(&t);
的问题是,指针即返回localtime(&t)
是静态内部缓冲器。所以每次调用它时都会返回完全相同的指针值(地址)。这意味着所有数组元素都有指向同一个对象的指针。
一种解决方案是使数据的副本每次调用localtime
时间:
struct cl {
unsigned char* buffer;
time_t t = time(0);
struct tm ct = *localtime(&t);
};
所以,现在我宣布struct tm ct;
(不是指针),并与的的提领值初始化返回指针*localtime(&t)
。
即使有效的C++?什么时候可以初始化这样的结构的成员? –
@ AndonM.Coleman自C++ 11起。您可以拥有课堂成员初始化。 – vsoftco
像答案一样,这是我的错误,我不应该用这样的指针初始化一个成员, – VirusPTIT