我最近遇到了使用代码的问题:
time_t today_t;
time(&today_t);
tm *today = localtime(&today_t);
time_t tomorrow_t = mktime(today);
tomorrow_t += 86400;
tm *tomorrow = localtime(&tomorrow_t);
问题是我的 今天 对象在我使用 localtime(& tomorrow_t)创建 后立即更改明天 对象,两个对象的值变得相等。我真的不明白这种行为。有什么帮助吗?
答案 0 :(得分:3)
localtime
对tm
结构使用单个静态变量,并返回指向它的指针。因此,today
和tomorrow
将具有相同的地址。
有一个可重入版本localtime_r
,它接受第二个参数,您可以在其中指定结构数据的放置位置。
答案 1 :(得分:0)
引用localtime
函数的Linux手册页:
返回值指向静态分配的结构,可能是 随后调用任何日期和时间都会被覆盖 功能。
localtime_r()
函数执行相同操作,但存储 用户提供的结构中的数据。
因此,如果你两次调用localtime()
,它每次都会返回相同的指针值,并用新值覆盖它。 today
是您拥有的struct tm*
指针; *today
是struct tm
对象,由C库拥有。
在调用之后将结构(而不是指针)复制到另一个struct tm
对象,或使用localtime_r
写入您提供的结构。 (localtime_r
不是100%可移植的;它由POSIX定义,但不是由ISO C标准定义。)