C++ 呼叫时间,以C++;更改我的结构tm

C++ 呼叫时间,以C++;更改我的结构tm,c++,c,time,C++,C,Time,我试图将当前时间与文件的日期修改时间进行比较,但遇到了一个奇怪的问题。我有一个struct tm*,它保存文件被修改的时间,但它在我调用时间(NULL)后更改为当前日期 我的代码: printf("month: %d\n", tmst->tm_mon); time_t curTime = time(NULL); printf("month: %d\n", tmst->tm_mon); struct tm * curSt = localtime ( &curTi

我试图将当前时间与文件的日期修改时间进行比较,但遇到了一个奇怪的问题。我有一个struct tm*,它保存文件被修改的时间,但它在我调用时间(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

为什么会这样?我应该采取哪些不同的做法?

与文档中的不同:

返回的值指向一个内部对象,该对象的有效性或值可能会因随后对gmtime或localtime的任何调用而改变

阅读文档

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


(返回指针是一条重要线索:你认为谁会释放指针对象?:D)

从文档中:

返回的值指向一个内部对象,该对象的有效性或值可能会因随后对gmtime或localtime的任何调用而改变

阅读文档

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

(这
localtime
返回指针是一条重要线索:您认为谁会释放指针对象?:D)

如手册页面中所述:

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

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

// Dereference and copy the result:
struct tm tmst = *localtime ( &st.st_mtime );
您也可以使用可重入变量
localtime\r
将结果复制到传递给它的参数中,但请注意,此函数不可移植。

如手册页中所述:

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

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

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

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

这不是
struct tm
。这是一个
struct tm*
。它不是
struct tm
。这是一个
struct tm*