之前在调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有内存申请操作,如果用户传入了已经申请好的内存会出错,当然这好像不怎么符合正常的编码习惯,做个记录吧