auto_ptr<BYTE> data(new BYTE[dataLen]);
dataLen = recv(acceptedSock, (char*)data.get(), dataLen, 0);CString Str;
LPTSTR Buf = Str.GetBuffer(dataLen+1);
memcpy((void*)Buf, data.get(), dataLen);
Buf[dataLen] = '\0';
Str.ReleaseBuffer();
AfxMessageBox(Buf);最后显示出来的总是在对的内容后面加一大堆乱码为什么会这样呀???谁能帮帮我??

解决方案 »

  1.   

    你直接操控CString的缓冲区当然会出问题的了,还没初始分配内存呢
    而Cstring在加入内容时会动态分配内存的
      

  2.   

    我用的是VC++ 2005.在Release模式下编译,程序运行时大多数时候会没有乱码,但有时会出现在正确内容后面有一个或两个乱码。如果在Debug模式下编译,无论什么时候都有一大堆乱码在正确内容的后面。
      

  3.   

    晕整个CSDN没一个人懂吗?都哪里去了?
      

  4.   

    我也不知道对不对 你试一下吧 CString::Format 把你要的字符串定义一下格式 看看会不会好点
      

  5.   

    auto_ptr<BYTE> data(new BYTE[dataLen]);
    dataLen = recv(acceptedSock, (char*)data.get(), dataLen, 0);CString Str;
    LPTSTR Buf = Str.GetBuffer(dataLen+1);
    memcpy((void*)Buf, data.get(), dataLen);
    Buf[dataLen] = '\0';   ======================>这一句的执行好像有问题?看看MSDN吧。
    Str.ReleaseBuffer();  ==========>以下两句顺序出了问题。
    AfxMessageBox(Buf);
    ======================改==为==:==========================
    CString Str;
    LPTSTR Buf = Str.GetBuffer(dataLen+1);
    memcpy((void*)Buf, data.get(), dataLen);
    Str = Str.Left(dataLen);
    AfxMessageBox(Str);
      

  6.   

    不行!还是一大堆乱码。总是在这一句出错。Str.ReleaseBuffer();
      

  7.   

    那就别用GetBuffer(),
    用char *Buf;
    Buf = new char(dataLen + 1);
    memcpy(Buf, data.get(), dataLen);
    Buf[dataLen] = '\0';
    AfxMessageBox(Buf);
      

  8.   

    没这么用过。你向CString的缓冲区里考东西,考完用GetLength()看看,Str的缓冲区长度是不是对的?记得好像看到过说CString被声明而未初始时有默认长度一说,可能是缓冲区变了而SIZE没更新。