StrSource = new TCHAR[ _tcslen(pText) ];

CopyMemory(StrSource,pText,_tcslen(pText) * 2);我用上面的代码来复制,但是长度为什么不一样呢?比原来的字符长了5-7个字符呢?

解决方案 »

  1.   


    StrSource = new TCHAR[ _tcslen(pText) + 1];  //最起码的+1
    CopyMemory(StrSource,pText,_tcslen(pText) * sizeof(TCHAR)); //*2是找死
      

  2.   

    你最好跟踪下,copy后,你的串中都是些什么东西, 就像2楼说的,很可能是你这个串没给它放一个结束符\0, 或者说直接就越界了.
      

  3.   

    DWORD dwSize = (_tcslen(pText) + 1) * sizeof(TCHAR);
    StrSource = new TCHAR[ _tcslen(pText) + 1]; //最起码的+1
    ZeroMemory(StrSource, dwSize);
    CopyMemory(StrSource,pText,_tcslen(pText) * sizeof(TCHAR)); //*2是找死
      

  4.   


    问题是NEW完后已经比原来长了几个字节
      

  5.   

    我申请出来的字符BUFFER已经比原来的要长了,为什么呢?
      

  6.   


    看样子是 pText 没结束符
    另外不熟悉的话,不要用CopyMemory来复制字符串
      

  7.   


    用CopyMemory的话,需要自己加结束符
    StrSource[_tcslen(pText) + 1] = 0;
    或者Copy多一个字符
    CopyMemory(StrSource,pText,(_tcslen(pText) + 1) * sizeof(TCHAR));
      

  8.   

    是的,但是为什么_tcslen(pText)能正确,NEW出来就不正确了
      

  9.   

    看上去不是复制的问题吧,NEW的时候已经比原来长了