关于一个时间的问题
代码如下:
#include <iostream>
#include <time.h>
#include <string>
using namespace std;
void main()
{
char iTime[1000];
char iTime2[1000];
cout<<"input iTime"<<endl;
gets(iTime);
cout<<"input iTime2"<<endl;
gets(iTime2);
time_t t1,t2;
struct tm *mytime,*mytime2;
t1=time(NULL);
mytime=localtime(&t1);
int nRt=sscanf(iTime,"%4d%2d%2d %d:%d:%d",&mytime->tm_year,&mytime->tm_mon,&mytime->tm_mday,&mytime->tm_hour,&mytime->tm_min,&mytime->tm_sec);
t2=time(NULL);
mytime2=localtime(&t2);
int nRt2=sscanf(iTime2,"%4d%2d%2d %d:%d:%d",&mytime2->tm_year,&mytime2->tm_mon,&mytime2->tm_mday,&mytime2->tm_hour,&mytime2->tm_min,&mytime2->tm_sec);////断点位置
mytime->tm_year-=1900;
mytime->tm_mon-=1;
t1=mktime(mytime);
mytime2->tm_year-=1900;
mytime2->tm_mon-=1;
t2=mktime(mytime2);
if(t1>t2)cout<<"iTime"<<asctime(mytime)<<" > iTime2"<<asctime(mytime2)<<endl;
else if(t1<t2)cout<<"iTime"<<asctime(mytime)<<" < iTime2"<<asctime(mytime2)<<endl;
else cout<<"iTime"<<asctime(mytime)<<" = iTime2"<<asctime(mytime2)<<endl;
}
问题:输入格式:20121130 08:20:22回车20121201 09:02:01,执行到断点时,mytime和mytime2使用的是相同的指针地址,存储内容也相同,但是输入的是不同的日期时间啊
请问错误出在哪里?如何修改?
[最优解释]
localtime和asctime的返回的指针指向的空间是静态空间,每次调用就覆盖以前的内容,而返回的指针值肯定是一样的.
你要想复用,就得先把里面的内容复制出来.最后输出语句更害人,也许是临时变量问题,不得在同一语句内写两次asctime;
#include <iostream>
#include <time.h>
#include <string>
#include <cstdio>
using namespace std;
int main()
{
char iTime[1000];
char iTime2[1000];
cout<<"input iTime"<<endl;
gets(iTime);
cout<<"input iTime2"<<endl;
gets(iTime2);
time_t t1,t2;
struct tm m,m2;
struct tm *mytime,*mytime2;
mytime=&m,mytime2=&m2;
int nRt=sscanf(iTime,"%4d%2d%2d %d:%d:%d",&mytime->tm_year,&mytime->tm_mon,&mytime->tm_mday,&mytime->tm_hour,&mytime->tm_min,&mytime->tm_sec);
int nRt2=sscanf(iTime2,"%4d%2d%2d %d:%d:%d",&mytime2->tm_year,&mytime2->tm_mon,&mytime2->tm_mday,&mytime2->tm_hour,&mytime2->tm_min,&mytime2->tm_sec);////断点位置
mytime->tm_year-=1900;
mytime->tm_mon-=1;
t1=mktime(mytime);
mytime2->tm_year-=1900;
mytime2->tm_mon-=1;
t2=mktime(mytime2);
if(t1>t2){cout<<"iTime "<<asctime(mytime); cout <<" > iTime2"<<asctime(mytime2)<<endl;}
else if(t1<t2){cout<<"iTime "<<asctime(mytime); cout <<" < iTime2"<<asctime(mytime2)<<endl;}
else cout<<"iTime"<<asctime(mytime)<<endl <<" = iTime2"<<asctime(mytime2)<<endl;
return 0;
}
[其他解释]
t1和t2是一样的,所以mytime和mytime2是一样的。
iTime和iTime2是不一样的,但这里其实没有使用。
[其他解释]
楼主解决了?
[其他解释]
cout<<"iTime"<<asctime(mytime)<<endl <<" = iTime2"<<asctime(mytime2)<<endl;
这样的语句等于
char *p=asctime(mytime);//
char *p2 = asctime(mytime2);//和上面都返回同一地址;
cout << "iTime"<<p<< "=iTime2"<<p2<<endl;
所以输出的内容是一样的.
localtime同理.
[其他解释]
COleDateTime
COleDateTimeSpan