今天在做一个小程序,需要比较一下本地时间和格林尼治时间,本地时间用localtime获取,格林尼治时间用gmtime获取,可比较结果竟然是两个时间相同,查找半天没有头绪,上网查询,得到结果让人赧颜,因为localtime和gmtime的返回结果都是放在STL静态区的,调用下一个函数会把上一次调用的结果覆盖掉,所以到用的时候两个时间就一样了,都是后来调用的那个函数的返回值。知道原因就好办了,首先在定义tm时由原来的定义为指针改为定义为变量,而在localtime和gmtime的返回值前加上取值符(*),这样就变为变量值的复制而不是传地址了。具体如下面代码:
这是原来出错代码
time_t tNow;
struct tm *tmlocal;
struct tm *tmGmt;
time(&tNow);
tmlocal = localtime(&tNow);
tmGmt = gmtime(&tNow);
这是改正后代码
time_t tNow;
struct tm tmlocal;
struct tm tmGmt;
time(&tNow);
tmlocal = *localtime(&tNow);
tmGmt = *gmtime(&tNow);