之前在調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有內存申請操作,如果用戶傳入了已經申請好的內存會出錯,當然這好像不怎麼符合正常的編碼習慣,做個記錄吧