簡體   English   中英

C ++中的調用時間更改了我的結構tm

[英]Calling time in C++ changes my struct tm

我正在嘗試將當前時間與文件的日期修改時間進行比較,並遇到一個奇怪的問題。 我有一個結構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);

..where st是一個struct stat的文件。 輸出為:

month: 11
month: 5

為什么是這樣? 我應該怎么做?

從文檔中:

返回的值指向一個內部對象,該對象的有效性或值可以通過隨后對gmtime或localtime的任何調用來更改。

閱讀文檔。

文檔介紹了函數的工作方式。

localtime返回指針是一個大提示:您認為誰釋放了pointe?

localtime(3)手冊頁中所述:

返回值指向靜態分配的結構,該結構可能會被后續對任何日期和時間函數的調用所覆蓋。

如果您不希望從自己身下修改值,則需要復制該值,例如:

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

您也可以使用可重入變量localtime_r將結果復制到傳遞給它的參數中,但是請注意,此函數不可移植。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM