[英]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.