C gmtime() 变量范围

问题描述 投票:0回答:2

我一直在用C语言工作,我以为指针不应该指向局部变量,但是库里有一个函数gmtime(),好像是返回一个指向里面创建的变量的指针。我的理解是否正确?

time_t epochTime;
time(&epochTime);
struct tm *currentTime=gmtime(&epochTime);
c pointers time.h dangling-pointer
2个回答
1
投票

内部的。gmtime 包含一个用 static 存储类指定符。 这意味着该变量具有完整的程序寿命,因此从函数中返回其地址是有效的。

这也就意味着,如果你把这个指针保存在某个地方,然后再调用 gmtime 再次使用不同的参数,它改变了保存的指针的指向。


0
投票

它不是返回一个指向局部变量的指针,而是返回一个指向静态分配的内存区域的指针。

来自man页。

返回值指向一个静态分配的结构,它可能会被后续对任何日期和时间函数的调用覆盖。

一个静态分配的内存区域可以是一个全局变量,或者是一个 static 本地变量。 后者不存在于堆栈中,而是存在于 data 段,以及其他静态分配的数据成员。

© www.soinside.com 2019 - 2024. All rights reserved.