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有內存申請操作,如果用戶傳入了已經申請好的內存會出錯,當然這好像不怎么符合正常的編碼習慣,做個記錄吧
總結
以上是生活随笔為你收集整理的c语言mktime函数遇到的一些坑的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HTML5 + Javascript 写
- 下一篇: 软件架构模式之事件驱动架构