C++ 结构 tm & time_t

C++ struct 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) returns 的 指针 是一个 static 内部缓冲区。所以它returns 每次被调用的指针值(地址)完全一样。这意味着您所有的数组元素都有指向同一个 struct tm 对象的指针。

一个解决方案是每次调用 localtime:

时都对数据进行 复制
struct cl {
    unsigned char* buffer;
    time_t t = time(0);  
    struct tm ct = *localtime(&t);
};

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