【问题标题】:Calling time in C++ changes my struct tmC++ 中的调用时间改变了我的 struct tm
【发布时间】:2014-07-24 10:35:50
【问题描述】:

我正在尝试将当前时间与文件的日期修改时间进行比较,但遇到了一个奇怪的问题。我有一个 struct tm * 保存文件被修改的时间,但是在我调用 time(NULL) 之后它被更改为当前日期。

我的代码:

  printf("month: %d\n", tmst->tm_mon);
  time_t curTime = time(NULL);
  printf("month: %d\n", tmst->tm_mon);
  struct tm * curSt = localtime ( &curTime );
  printf("month: %d\n", tmst->tm_mon);

..其中st 是文件的struct stat。输出是:

month: 11
month: 5

这是为什么?我应该做些什么不同的事情?

【问题讨论】:

  • 这不是struct tm。这是struct tm*

标签: c++ c time


【解决方案1】:

localtime(3) 手册页中所述:

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

如果您不希望从您下面修改该值,则需要将其复制出来,例如:

// Dereference and copy the result:
struct tm tmst = *localtime ( &st.st_mtime );

您也可以使用可重入变体localtime_r 将结果复制到传递给它的参数中,但请注意此函数不可移植。

【讨论】:

    【解决方案2】:

    来自文档:

    返回值指向一个内部对象,其有效性或值可能会被任何后续调用 gmtime 或 localtime 更改。

    阅读文档。

    文档告诉你函数是如何工作的。

    localtime 返回一个指针是一个很大的线索:你认为谁释放了指针?:D)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-01
      • 1970-01-01
      • 2012-08-28
      • 2017-09-26
      • 1970-01-01
      相关资源
      最近更新 更多