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)
的 解引用值 初始化它。
我这里有一系列时间:
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)
的 解引用值 初始化它。