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获得的,往往比你申请的要大些)。