复制结构 tm
Copying struct tm
结构tm 的 glibc 版本有其他字段
long tm_gmtoff; /* Seconds east of UTC */
const char *tm_zone; /* Timezone abbreviation */
(参考: http://linux.die.net/man/3/ctime ) 我的问题是:如果我有一个名为结构 tm a 的数据,我想将其复制到另一个结构 tm b,如下代码所示:
time_t t = time(0);
const tm *pa = localtime(&t);
struct tm a;
if(pa) {
memcpy(&a, pa, sizeof(a));
}
但是,tm_gmtoff和tm_zone会发生什么?如何复制这些字段?
这是编译器的工作。它将采取所有必要的操作。
只需执行以下操作:
struct tm a = *localtime(&t);
由于locatime()
可能会返回空指针,因此请避免
const struct tm a = *localtime(&t); // Potential UB.
相反,请测试空性,然后使用=
进行复制。memcpy()
不需要。 将复制所有struct tm
成员。
struct tm a = { 0 }; // Fill in a default value
const tm *pa = localtime(&t);
if (pa) {
a = *pa;
}
OP 注释 但是tm_zone是一个字符数组,但这是不对的。tm_zone
不是字符数组,而是指向const
字符数组的指针。 复制该指针在这里很好。
我认为在大多数情况下,memcpy
是正确的做法。
但是,tm_gmtoff和tm_zone会发生什么?如何复制这些字段?
根据您链接的文档,这些字段仅在包含<time.h>
之前设置_BSD_SOURCE
时才存在。
所以如果你正在使用_BSD_SOURCE
,你需要在memcpy
之后tm_zone
上使用strcpy
。
相关文章:
- 如何循环打印顶点结构
- 通过方法访问结构
- 将 OLE 自动化日期 (OADate) 双精度转换为结构 tm,而不使用 VariantTime到SystemTime
- 复制结构 tm
- 无法声明指向"结构 TM& 的指针
- 如何在 C++ 中将结构 TM 转换为time_t
- C++结构TM&time_t
- 如何检测在使用tm结构时是否存在闰秒
- 如何判断我的结构tm是否处于无效状态
- 如何在不更改原始 tm 结构的情况下使用 mktime()
- C++ 将包含 UTC 日期和时间的字符串转换为 TM 结构
- 如何用自己的值填充tm结构,然后打印出来
- 为什么mktime()会更改我的tm结构的年份
- 为什么在调用 localtime() 函数之前不需要 malloc 结构 tm 指针?
- 正在查找具有tm以外的成员对象的另一个时间结构
- 我如何使用tm结构添加分钟到当前时间
- 一个tm结构中的错误破坏了其他tm结构
- 在c++中调用time会改变我的结构体tm
- 直接设置结构 tm 属性的值不起作用
- 当给定一个有效的结构tm时,Mktime返回-1