struct InfoTime
{
 char year[4];
 char month[2];
 char day[2];
};CString str = _T("20121221");
如何使str的字符串,赋值到结构体中InfoTime time;
使得 time.year = "2012"; time.month = "12"; time.day = "21";求思路

解决方案 »

  1.   

    CString str = _T("20121221");
    InfoTime time;
    memcpy(time.year, T2A(str.Left(4)), 4);
    memcpy(time.year, T2A(str.Mid(4,2)), 2);
    memcpy(time.year, T2A(str,Right(2)), 2);如果定义为
    struct InfoTime
    {
         char year[4 + 1];
         char month[2 + 1];
         char day[2 + 1];
    };
    则memcpy改为strcpy
      

  2.   

    直接 memcpy((void*)&time, str.GetBuffer(0), 8);就行了
    不过你这个结构体设计的有问题 应该设计成
    struct InfoTime
    {
         char year[5];
         char month[3];
         char day[3];
    };
    不然你输出time.year由于找不到/0结束符会越界。
    不过这样就没法直接赋值了
      

  3.   

    哦,在T2A前要加USES_CONVERSION;
      

  4.   


    memcpy((void*)&time, str.GetBuffer(0), 8);这个这样拷贝不行吧。。我这里不能实现
      

  5.   

    struct InfoTime
    {
      char year[4];
      char month[2];
      char day[2];
    };如果mencpy 做上面的结构copy  是可以把内容给拷贝进去,但是取值的话,因为没有\0这取值,会出现很大问题,取的不是自己想要的值,应该怎么取值。。假设。year,只能取前4位值是正确的应该如何取值??
      

  6.   

    假设。year,只能取前4位值是正确的应该如何取值??在memcpy到一个char year1[5]中,并把最后一位设为\0
      

  7.   

    实际应用建议你这样定义结构typedef struct tagIT 

        char year[4]; 
        char rev1;      //作为字串结尾
        char month[2]; 
        char rev2;      //作为字串结尾
        char day[2]; 
        char rev3;      //作为字串结尾
    }InfoTime; 
    赋值可以这样
    InfoTime time;
    char *str = "20121221";sscanf(str,"%4s%2s%2s",time.year,time.month,time.day);
    time.rev1=time.rev2=time.rev3=0;
      

  8.   

    char *str = "20121221";
    改成
    CString str = _T("20121221")
    也可以