定义了这样一个取时间的函数
tm *TIME()
{
time_t timep;
struct tm *p;
time(&timep);
p=localtime(&timep);
return p;
}
tm *tim1;
tm *tim2;
先取tim1=TIME();
再取tim2=TIME();
结果time1取到的时间的值变成了tim2的值!这个应该怎么改。
本人需要取两次时间然后求两个时间之间的差值。
tm *TIME()
{
time_t timep;
struct tm *p;
time(&timep);
p=localtime(&timep);
return p;
}
tm *tim1;
tm *tim2;
先取tim1=TIME();
再取tim2=TIME();
结果time1取到的时间的值变成了tim2的值!这个应该怎么改。
本人需要取两次时间然后求两个时间之间的差值。
解决方案
15
http://en.cppreference.com/w/c/chrono/localtime
里面说到了:1) pointer to a static internal tm object on success, or null pointer otherwise. The structure may be shared between gmtime, localtime, and ctime and may be overwritten on each invocation.
就是你下一次获取时间会改变共享的那个变量值
解决办法可以返回tm,而不是指针:
tm TIME()
{
time_t timep;
struct tm *p;
time(&timep);
p=localtime(&timep);
return p;
}
tm tim1;
tm tim2;
先取tim1=TIME();
再取tim2=TIME();
里面说到了:1) pointer to a static internal tm object on success, or null pointer otherwise. The structure may be shared between gmtime, localtime, and ctime and may be overwritten on each invocation.
就是你下一次获取时间会改变共享的那个变量值
解决办法可以返回tm,而不是指针:
tm TIME()
{
time_t timep;
struct tm *p;
time(&timep);
p=localtime(&timep);
return p;
}
tm tim1;
tm tim2;
先取tim1=TIME();
再取tim2=TIME();
20
原因是你保存的是获取时间的指针,再下车过去时间后会更新指针指向的内容,因此你必须每次都保存时间值而不是指向它的指针
15
假如单纯求两个时间差,不需要localtime,time(&tm1) – time(&tm2);
假如要获取开始时间和结束时间,建议用struct tm变量,而不是用指针;
假如要获取开始时间和结束时间,建议用struct tm变量,而不是用指针;