C++结构TM&time_t的

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_min59。那有什么问题?它是不是抓住它的那一刻,它会一直更新吗?如果是这样,我该如何捕捉时间,而不是像那样更新。

+0

即使有效的C++?什么时候可以初始化这样的结构的成员? –

+3

@ AndonM.Coleman自C++ 11起。您可以拥有课堂成员初始化。 – vsoftco

+0

像答案一样,这是我的错误,我不应该用这样的指针初始化一个成员, – VirusPTIT

这条线:

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)