pChunkBuf后没有字符串的结束符!!
你定义51个byte,最后一个写入null

解决方案 »

  1.   

    既然你的内存块里面有正好 50 个字符,就证明是对的。后面的内容不是你的内存块里的内容。因为 VC Debugger 把 BYTE* 当作字符串来显示的缘故。
      

  2.   

    你不要用new操作符,new操作符经常会带来这种问题,你不妨直接用auto变量声明一个变量,然后初始化它,再用,应该就可以了!
      

  3.   

    啊,我猜是你memcpy时 ,的pChunkBuf最后不是'\0'字符,所以才会
    输出一个字符串是获得串首地址,然后输出直到遇到'\0'结束。
    完全可能pBuf的第50的一个字符不是'\0'哟,然后如上所说的现象发生哦
      

  4.   

    belle:我的pBuf是这样得到的:
    long lLen = strSpt.GetLength();
    BYTE *pBuf = (unsigned char *)strSpt.GetBuffer(lLen); 是不是要这样:
             long lLen = strSpt.GetLength();
    BYTE *pBuf = (unsigned char *)strSpt.GetBuffer(lLen) + "\0"; 我自己再试试!       
      

  5.   

    long lLen = strSpt.GetLength();
    BYTE *pBuf = (unsigned char *)(strSpt.GetBuffer(lLen) + char('\0')); 这样还不行!
      

  6.   

    BYTE *pChunkBuf = NULL;
    if(pChunkBuf = new BYTE[50]) 

       pChunkBuf[50]='\0';
        ::memcpy(pChunkBuf, pBuf, 50);                
    }
      

  7.   

    搞错了,
    BYTE *pChunkBuf = NULL;
    if(pChunkBuf = new BYTE[50]) 

      pChunkBuf[49]='\0';
        ::memcpy(pChunkBuf, pBuf, 50);                
    }
      

  8.   

    Please try:BYTE *pChunkBuf = NULL;
    if((pChunkBuf = new BYTE[51]) != NULL)

        memcpy(pChunkBuf, pBuf, 50);
        pChunkBuf[50] = 0;                
    }
      

  9.   

    建议:pChunkBuf=new BYTE[51];
    if(pChunkBuf)
    {
      memset(pChunkBuf,0,51);
      memcpy(pChunkBuf, pBuf, 50);
    }
      

  10.   

    非常感谢各位!
    也不知道CSDN论坛是哪个弱智的家伙写的,限制一个人只能回复同一个贴子三次,
    弄得我有得贴子没办法送分了!