【问题标题】:C gmtime() Variable scopeC gmtime() 变量作用域
【发布时间】:2020-06-18 03:58:01
【问题描述】:

我一直在使用 C,我认为指针不应该指向局部变量,但是库包含一个函数 gmtime(),它似乎返回一个指向在其中创建的变量的指针。我的理解正确吗?

time_t epochTime;
time(&epochTime);
struct tm *currentTime=gmtime(&epochTime);

【问题讨论】:

    标签: c pointers time.h dangling-pointer


    【解决方案1】:

    在内部,gmtime 包含一个使用 static 存储类说明符声明的变量。这意味着该变量具有完整的程序生命周期,因此从函数返回其地址是有效的。

    这也意味着,如果您将该指针保存在某处并使用不同的参数再次调用gmtime,它会更改保存的指针指向的内容。

    【讨论】:

      【解决方案2】:

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

      来自手册页:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-12
        • 2012-05-02
        • 2016-04-19
        • 2014-01-15
        • 2018-01-20
        • 2011-01-11
        相关资源
        最近更新 更多