c語言mktime函數遇到的一些坑

之前在調mktime函數,當轉換時間時遇到多次調用該函數時小時數會出錯,本來賦值的是一個數值,但是調用該函數以後數值被更改(小時數加一),出錯的函數調用可表示爲:

struct tm stm;
time_t t;

sscanf(date,"%d/%d/%d %d:%d:%d", &stm.tm_year,&stm.tm_mon,&stm.tm_mday,
            &stm.tm_hour,&stm.tm_min,&stm.tm_sec);
stm.tm_year   -=  1900; 
stm.tm_mon    -=  1;
t = mktime(&stm); 

其中data爲輸入字符串,包含相對於的時間格式,多次調用該函數時stm.tm_hour會加一,試了很多,排除其餘代碼內存改寫問題,看網上很多mktime輸入參數都是用指針方式做了以下測試代碼後不會出現問題:

struct tm stm;
time_t t;

 time(&t);
 stm = localtime(&t); 
 sscanf(date,"%d/%d/%d %d:%d:%d", &(stm->tm_year),&(stm->tm_mon),&(stm->tm_mday),
            &(stm->tm_hour),&(stm->tm_min),&(stm->tm_sec));
 stm->tm_year   -=  1900; 
 stm->tm_mon    -=  1;
 t = mktime(stm); 

初步懷疑mktime在函數內部對struct tm有內存申請操作,如果用戶傳入了已經申請好的內存會出錯,當然這好像不怎麼符合正常的編碼習慣,做個記錄吧

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章