如果我要使用memcpy

memcpy是物理层次的复制  不管你类型是否统一  我就给你复制了^0^
这里探讨下常见的情况:
实例1:

   (LPCWSTR-->LPWSTR)

        ...
    LPCWSTR strConst = L"ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    LPWSTR strNormal = new WCHAR[50];

    memcpy(strNormal, strConst, 10);//乱码
        ...
    这说明:从小的size复制到大的size,只复制少部分字符,是不行的。

实例2:
    (LPCWSTR-->LPWSTR)
        ...
     LPCWSTR strConst = L"ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    LPWSTR strNormal = new WCHAR[20];


    int nLenConst = wcslen(strConst);  //很奇怪的现象,这个大小不是你申请的大小
    int nLenNormal = wcslen(strNormal);
    memcpy(strNormal, strConst, nLenNormal);//乱码
        ...
     这说明:从大的size复制到小的size就绝对不行的。

实例3:

     (LPCWSTR-->LPWSTR)

        ...
    LPCWSTR strConst = L"ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    LPWSTR strNormal = new WCHAR[50];


    int nLenConst = wcslen(strConst);
    int nLenNormal = wcslen(strNormal);
    memcpy(strNormal, strConst, 40);   //乱码
        ...

      这说明:从小的size复制到大的size即使复制的字符数比源字符串还多--只要比目标字符串的字符数少就不行。

实例4:
     
      (LPWSTR-->LPWSTR)

        ...
    LPCWSTR strConst = L"ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    LPWSTR strNormal = new WCHAR[50];


    int nLenConst = wcslen(strConst);
    int nLenNormal = wcslen(strNormal);
    memcpy(strNormal, strConst, nLenNormal); //终于正常了
        ...
      这说明:从小的size复制到大的size 且使用目标字符串的len才可以。

     memcpy真叼啊。。要成功使用,还真不是那么简单。


    如果要我使用memcpy,我一定:从小的size复制到大的size,而且第三个参数一定使用目标字符串的大小(这个大小使用wcslen获得的,往往比你申请的要大些)。

原文地址:https://www.cnblogs.com/tupx/p/3434137.html