程序如下:
UCHAR *buffer=(UCHAR *)malloc(4096);
CString str;
int start_pos=10;
int len=16;我在buffer中某个位置开始存放的是一个字符串,开始位置start_pos和长度len都知道。问题是怎样从buffer中读出来,赋给str?我现在用:strcpy(str.GetBuffer(0), (char *)&buffer[start_pos]);能读出,但是:
1:如果字符串后接着有其他字符也会读出来,虽然可以根据长度截取,但有时会出错。
2:unsigned char * 转换为 char * 不知道会不会丢失数据?请高手帮我看看怎么样解决,或者有其他的好方法?多谢了。

解决方案 »

  1.   

    用strncpy或者memcpy指定复制长度
    unsigned char * 转换为 char * 不会丢失数据
      

  2.   

    CString strTmp=buffer;CString str=strTmp.Mid(start_pos,len);
      

  3.   

    保证你字符串的合法性(正确NULL-Terminated,不会造成越界)的前提下
    直接str = (char *)&buffer[start_pos]就行了
      

  4.   

    TO: gaohl(量子)
    memcpy(str.GetBuffer(0), &buffer[start_pos], len);取出来的还是会多。-------------------------------------------
    TO: luohongming(lhm)CString strTmp=buffer;
    CString str=strTmp.Mid(start_pos,len);
    这样估计不行,buffer前面的存放的有\0。--------------------------------------------
    TO: jasonshark(没暑假了...)
    字符串后可能会连续接着有其他字符。
      

  5.   

    char * p=new char[len+1];
    memset(p,0,len+1);
    memcpy(p,buffer+start_pos,len);
    CString str=p;
    delete[] p;
      

  6.   

    后面还接其他字符串阿...这个就不太合理了
    那你接着再str.Left()一次吧
      

  7.   

    UCHAR c;
    c=buffer[start_pos+len];
    buffer[start_pos+len]=0;
    str.Format("%s",(buffer+start_pos));
      

  8.   

    先把BUFF中的内容负给CString类型变量msg
    再对MSG处理str=msg.mid(pos,n);
    如果你能保证你的pos,n不了错应该没问题
      

  9.   

    luohongming(lhm) 的以下代码
    char * p=new char[len+1];
    memset(p,0,len+1);
    memcpy(p,buffer+start_pos,len);
    CString str=p;
    delete[] p;
    应该行。
      

  10.   

    memcpy(str.GetBufferSetLength(len),buf+start_pos,len);
      

  11.   

    刚来
    就要结帖..
    ----
    char * p=new char[len+1];
    memset(p, 0, sizeof(char) * (len+1));
    memcpy(p,buffer+start_pos,len);
    CString str=p;
    delete[] p;