我有段程序是实现把一个BSTR类型的时间数据转换字符串,再分别截取为年月日时分秒六个字符串,接着加上一定时间,最后返回一个包含年月日时分秒的字符串。为简单起,这里去掉了加上一定时间的部分。也就是相当于,先拆开后又重组的一段程序,现在问题是重组后,不能得到原来的字符串了,请教各位为什么?m_time的格式:2005-11-10 16:12:05
char* Cdrawtrendfig::MinutesAddFunc(BSTR m_time,float add_time)
{
char* str=_com_util::ConvertBSTRToString(m_time);
CHAR* buf1=new CHAR[4];
CHAR* buf2=new CHAR[2];
int yy,mm,dd,hou,min,sec;
yy=0;mm=0;dd=0;hou=0;min=0;sec=0;
//--------------拆分为年月日及各时间--------------
int startpoint=0;//字符串开始拷贝的位置
int endpoint=0;//字符串结束拷贝的位置
for( int i=0;i<lstrlen(str);i++)//查找字符串结束拷贝位置
{
if(!isdigit(str[i]))//遇到第一个非数字字符即为结束拷贝位置
{
endpoint=i;
break;
}
}
strncpy(buf1,str,endpoint);//拷贝年份
yy=atoi(buf1);//转换为整数型
for(int i=endpoint;i<lstrlen(str);i++)//查找新的拷贝起始位置
{
if(isdigit(str[i]))//遇到第一个数字字符时开始拷贝
{
startpoint=i;
break;
}
}
for( int i=startpoint;i<lstrlen(str);i++)
{
if(!isdigit(str[i]))
{
endpoint=i;
break;
}
}
strncpy(buf2,str+startpoint,endpoint-startpoint);
mm=atoi(buf2);
for(int i=endpoint;i<lstrlen(str);i++)
{
if(isdigit(str[i]))
{
startpoint=i;
break;
}
}
for( int i=startpoint;i<lstrlen(str);i++)
{
if(!isdigit(str[i]))
{
endpoint=i;
break;
}
}
strncpy(buf2,str+startpoint,endpoint-startpoint);
dd=atoi(buf2);
for(int i=endpoint;i<lstrlen(str);i++)
{
if(isdigit(str[i]))
{
startpoint=i;
break;
}
}
for( int i=startpoint;i<lstrlen(str);i++)
{
if(!isdigit(str[i]))
{
endpoint=i;
break;
}
}
strncpy(buf2,str+startpoint,endpoint-startpoint);
hou=atoi(buf2);
for(int i=endpoint;i<lstrlen(str);i++)
{
if(isdigit(str[i]))
{
startpoint=i;
break;
}
}
for( int i=startpoint;i<lstrlen(str);i++)
{
if(!isdigit(str[i]))
{
endpoint=i;
break;
}
}
strncpy(buf2,str+startpoint,endpoint-startpoint);
min=atoi(buf2);
for(int i=endpoint;i<lstrlen(str);i++)
{
if(isdigit(str[i]))
{
startpoint=i;
break;
}
}
strncpy(buf2,str+startpoint,lstrlen(str)-startpoint);
sec=atoi(buf2); sprintf(str,"%d-%d-%d %d:%d:%d",yy,mm,dd,hou,min,sec);//重组字符串
delete []buf1;
delete []buf2;
return str;
}
char* Cdrawtrendfig::MinutesAddFunc(BSTR m_time,float add_time)
{
char* str=_com_util::ConvertBSTRToString(m_time);
CHAR* buf1=new CHAR[4];
CHAR* buf2=new CHAR[2];
int yy,mm,dd,hou,min,sec;
yy=0;mm=0;dd=0;hou=0;min=0;sec=0;
//--------------拆分为年月日及各时间--------------
int startpoint=0;//字符串开始拷贝的位置
int endpoint=0;//字符串结束拷贝的位置
for( int i=0;i<lstrlen(str);i++)//查找字符串结束拷贝位置
{
if(!isdigit(str[i]))//遇到第一个非数字字符即为结束拷贝位置
{
endpoint=i;
break;
}
}
strncpy(buf1,str,endpoint);//拷贝年份
yy=atoi(buf1);//转换为整数型
for(int i=endpoint;i<lstrlen(str);i++)//查找新的拷贝起始位置
{
if(isdigit(str[i]))//遇到第一个数字字符时开始拷贝
{
startpoint=i;
break;
}
}
for( int i=startpoint;i<lstrlen(str);i++)
{
if(!isdigit(str[i]))
{
endpoint=i;
break;
}
}
strncpy(buf2,str+startpoint,endpoint-startpoint);
mm=atoi(buf2);
for(int i=endpoint;i<lstrlen(str);i++)
{
if(isdigit(str[i]))
{
startpoint=i;
break;
}
}
for( int i=startpoint;i<lstrlen(str);i++)
{
if(!isdigit(str[i]))
{
endpoint=i;
break;
}
}
strncpy(buf2,str+startpoint,endpoint-startpoint);
dd=atoi(buf2);
for(int i=endpoint;i<lstrlen(str);i++)
{
if(isdigit(str[i]))
{
startpoint=i;
break;
}
}
for( int i=startpoint;i<lstrlen(str);i++)
{
if(!isdigit(str[i]))
{
endpoint=i;
break;
}
}
strncpy(buf2,str+startpoint,endpoint-startpoint);
hou=atoi(buf2);
for(int i=endpoint;i<lstrlen(str);i++)
{
if(isdigit(str[i]))
{
startpoint=i;
break;
}
}
for( int i=startpoint;i<lstrlen(str);i++)
{
if(!isdigit(str[i]))
{
endpoint=i;
break;
}
}
strncpy(buf2,str+startpoint,endpoint-startpoint);
min=atoi(buf2);
for(int i=endpoint;i<lstrlen(str);i++)
{
if(isdigit(str[i]))
{
startpoint=i;
break;
}
}
strncpy(buf2,str+startpoint,lstrlen(str)-startpoint);
sec=atoi(buf2); sprintf(str,"%d-%d-%d %d:%d:%d",yy,mm,dd,hou,min,sec);//重组字符串
delete []buf1;
delete []buf2;
return str;
}
解决方案 »
- 调试的时候为什么看不到int *p数组的其他数据?只能看到p首地址的数据~
- 求助一个简单问题
- 关于输入法鼠标事件的问题,请大家帮忙~~懂hook的也帮我看看吧,谢谢啦
- 公司经营不善,无项目可做,老总态度恶劣,待不下去了.求职.
- 有关UPDATE_COMMAND_UI的问题
- 【求教】关于在按钮上加一个位图的问题
- VC下如何读取格式不规则的数据文件
- 请求Win32 SDK 高手救我一命!
- 我现在在做一个WORD嵌入IE的控件,WORD可以正常启动,但WORD是单独的,并没有嵌入在IE中
- 请问怎么使得一个button从活动状态变为不能获得焦点的状态!
- MS写API
- 关于CDHtmlDialog的问题
{
char* str=_com_util::ConvertBSTRToString(m_time);
CHAR* buf1=new CHAR[4];
CHAR* buf2=new CHAR[2];
int d_time[6];//分别存放年月日时分秒
//--------------拆分为年月日及各时间--------------
int startpoint=0;//字符串开始拷贝的位置
int endpoint=0;//字符串结束拷贝的位置
for(int i=0;i<6;i++)
{
for( int j=startpoint;j<lstrlen(str);j++)//查找字符串结束拷贝位置
{
if(!isdigit(str[j]))//遇到第一个非数字字符即为结束拷贝位置
{
endpoint=j;
break;
}
}
if(i==0)
{
strncpy(buf1,str,endpoint);//拷贝年份
d_time[i]=atoi(buf1);//转换为整数型
}
else
{
strncpy(buf2,str,endpoint);//拷贝年份
d_time[i]=atoi(buf2);//转换为整数型
}
for(int j=endpoint;j<lstrlen(str);j++)//查找新的拷贝起始位置
{
if(isdigit(str[j]))//遇到第一个数字字符时开始拷贝
{
startpoint=j;
break;
}
}
} sprintf(str,"%d-%d-%d %d:%d:%d",d_time[0],d_time[1],d_time[2],d_time[3],d_time[4],d_time[5]);//重组字符串
delete []buf1;
delete []buf2;
return str;
}