• 如果我要使用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获得的,往往比你申请的要大些)。

  • 相关阅读:
    HDU 1711
    HDU 4135
    HDU 4462
    HDU 1969
    flask的nocache防止js不刷新
    python2.x里unicode错误问题
    使用SwingWork反而阻塞SwingUI
    利用JProfile 7分析内存OOM
    编译android的一些坑
    java jmenu的替代方案
  • 原文地址:https://www.cnblogs.com/tupx/p/3434137.html
Copyright © 2020-2023  润新知