C++ struct tm&time_t

Vir*_*TIT 10 c++ time-t c++11

我在这里有一段时间:

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

然后:

cl sadi[10];
Run Code Online (Sandbox Code Playgroud)

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

Gal*_*lik 17

这一行:

struct tm* ct = localtime(&t);
Run Code Online (Sandbox Code Playgroud)

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

一种解决方案是每次调用时复制数据localtime:

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

所以现在我声明struct tm ct;(不是指针)并使用返回指针的解除引用值初始化它*localtime(&t).