C语言中gmtime函数的语法为:

struct tm *gmtime(const time_t *timer);

通常给gmtime打电话是
tm *xx = gmtime( &curr_time );

这将使检查gmtime函数是否返回NULL指针更加容易。
if (xx)
    return sucess;

但是,这是不安全的,因为返回值指向静态分配的结构,该结构可能被后续对任何日期和时间函数的调用所覆盖。

所以比较安全的方法之一是使用
time_t curr_time = time(0);
tm xx = *gmtime( &curr_time );

但是如果这样拨打电话

如何在取消引用xx变量之前检查null?

“不安全”来源-https://linux.die.net/man/3/gmtime

最佳答案

从手册页引用

gmtime()函数将日历时间timep转换为细分时间表示,以协调世界时(UTC)表示。当年份不适合整数时,它可能返回NULL。返回值指向静态分配的结构,该结构可能会被后续对任何日期和时间函数的调用所覆盖。 gmtime_r()函数执行相同的操作,但是将数据存储在用户提供的struct 结构中。

所以,你只需要做

time_t now = time(NULL);
struct tm result;

if (!gmtime_r(&now, &result)) {
  // error
}

然后,“结果”不能被另一个时间函数调用覆盖。

10-08 15:18