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

  • 相关阅读:
    android 底部菜单栏实现(转)
    android 用webView作为编辑器 各种问题
    android 自定图库(转)
    js document.queryCommandState() 各个参数
    自定义简单的按钮点击动画效果
    android 类似QQ底部输入框弹出键盘和面板冲突 布局闪动处理方案(转)
    android 自定义控件View在Activity中使用findByViewId得到结果为null
    Tinker 热修复框架 简单上手教程
    网页天气模块,包括当天天气和未来四天预报
    关于闭包(closure)的一些概念
  • 原文地址:https://www.cnblogs.com/tupx/p/3434137.html
Copyright © 2011-2022 走看看