C++编程时候,时不时会用到一些系统函数,有可能会遇到踩坑的情况
1. mktime
踩坑现象:mktime返回-1
tm t;
time_t timeT = mktime(t);
分析原因:不一定出现,不同编译器表现也不一样,我这边用的一个64位编译器上遇到概率大,怀疑是内部的内容没有初始化会有脏数据导致
解决:规范写法,需要memset
tm t;
memset(&t,0,sizeof(tm));
time_t timeT = mktime(t);
2. localtime
踩坑现象:执行后出来year是255
struct tm *t ;
t = localtime(UtcTime);
t->year;
分析原因:由于里面的tm是内部控制,一样不确定是否会存在mktime一样的问题.上遇到了概率性出现问题,概率获取出来是year是255
解决:尽量使用 localtime_r,同时它还是线程安全的
struct tm t ;
memset(&t,0,sizeof(tm));
localtime_r(&UtcTime,&t);
t.year;