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
}
然后,“结果”不能被另一个时间函数调用覆盖。