我有段程序是实现把一个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;
}

解决方案 »

  1.   

    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 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;
    }