循环取出  strD  中的字符    
BSTR是宽字符,前四位是长度      CString  strD  =  "asdfni发饿死噶发哈发";  
      BSTR  strD  =  strC.AllocSysString(  );        for(int y=4;y<10;y++)
      {
  WCHAR p=strD[y];
      }
对吗

解决方案 »

  1.   

    循环取出  strD  中的字符    
    BSTR是宽字符,前四位是长度      CString  strD  =  "asdfni发饿死噶发哈发";  
          BSTR  strD  =  strC.AllocSysString(  );        for(int y=4;y<10;y++)
          {
      WCHAR p=strD[y];
          }
    对吗
      

  2.   

    应该是:
    CString  strC =  "asdfni发饿死噶发哈发";  
    对吗?
      

  3.   

    对应该是:
    CString  strC =  "asdfni发饿死噶发哈发";
      

  4.   

    for(int y=4;y<10;y++)
          {
      char p=strC.GetAt[y];
          }
      

  5.   

    不对,应该从第0为开始取,第零位之前的四位才是长度,所以你就把它当成一个正常的UNICODE字符串就OK啦
    循环取出  strD  中的字符    
    BSTR是宽字符,前四位是长度      CString  strD  =  "asdfni发饿死噶发哈发";  
          BSTR  strD  =  strC.AllocSysString(  );        for(int y=4;y<10;y++)
          {
      WCHAR p=strD[y];
          }
    对吗
      

  6.   

    他是一个数组,它前面的四个字节是他的长度,最多你只要循环取出你需要的东东就可以了
    4:  CString::AllocSysString  (  )或者::SysAllocString得到的字符串并不是普通的UNICODE字符串,它之前的四个字节会存放申请的字符串的长度:  
     
                     CString  strD  =  "asdf法萨卡萨"; 
                     BSTR  strD  =  strC.AllocSysString(  )  ;  
                     long  i  =*  (  (  long  *  )  strD  –  1  )  ;  
    for(int y=0;y<i;y++)
          {
      WCHAR p=strD[y];
          }
    SysFreeString(strD);
      

  7.   

    错了错了,i是字节树,所以要除以2                 CString  strD  =  "asdf法萨卡萨"; 
                     BSTR  strD  =  strC.AllocSysString(  )  ;  
                     long  i  =*  (  (  long  *  )  strD  –  1  )  ;  
    for(int y=0;y<i/2;y++)
          {
      WCHAR p=strD[y];
          }
    SysFreeString(strD);
      

  8.   

    错了错了,i是字节树,所以要除以2                 CString  strD  =  "asdf法萨卡萨"; 
                     BSTR  strD  =  strC.AllocSysString(  )  ;  
                     long  i  =*  (  (  long  *  )  strD  –  1  )  ;  
    for(int y=0;y<i/2;y++)
          {
      WCHAR p=strD[y];
          }
    SysFreeString(strD);
    每个p如何组合成字符串,比如strD[0],strD[1]组合起来
      

  9.   

    这种wcs打头的函数你多看一下
    wchar_t *wcsncat( wchar_t *strDest, const wchar_t *strSource, size_t count );
      

  10.   

    wchar_t *wcsncat( wchar_t *strDest, const wchar_t *strSource, size_t count );
    是否工程设置里要改一些配置,比如连接库wchar_t * string;我运行到   wcsncat(string,strD,i/2);
    出错
      

  11.   

    wchar_t * str6ing;
    wcscpy(str6ing,strD);   /////运行到这里出错wcsncat(str6ing,strD,i/2);
      

  12.   

    string你有没有申请空间?
    string=new wchar_t[256];
      

  13.   

    CString  leftillname;
    leftillname="泡畛性别口眼"; 
      BSTR leftname=leftillname.AllocSysString();
    long bstri =*((long*)leftname-1);
    wchar_t * string;
    bstri=bstri/2;   ///bstri=6;
    string=new wchar_t[bstri];
    wcsncpy(string,leftname,bstri);
    pDC->TextOut(90, nHeight*j+5, string) ;delete string;
    为什么打印出    泡畛性别口眼??????
      

  14.   

    CString  leftillname;
    leftillname="泡畛性别口眼"; 
      
    BSTR leftname=leftillname.AllocSysString();
    long bstri =*((long*)leftname-1);
    wchar_t * string;
    string=new wchar_t[bstri];        ////////bstri应该是bstri还是bstri/2
    wcsncpy(string,leftname,bstri);   ////////bstri应该是bstri还是bstri/2
    pDC->TextOut(90, nHeight*j+5, string) ;//////比如打印”畛性别口眼“,leftname是                                          leftname+1还是leftname+2delete string;
    为什么打印出    泡畛性别口眼??????
    );
      

  15.   

    string=new wchar_t[bstri/2+1]; 
    wcsncpy(string,leftname,bstri/2+1);          
    最后没有用0结尾
    string[bstri/2]=0;
    delete应该用delete []string;
      

  16.   

    比如打印两行bstri是44,第一行打了15个字符号
    string=new wchar_t[16];
    wcsncpy(string,leftname,16);

    pDC->TextOut(90, nHeight*j+5, string) ;为什么事实却是把44个全打出来了