wmemcpy
似乎执行与memcpy
相同的操作,但是接受wchar_t*
而不是void*
。如果这两个代码段应该具有相同的行为,那么它的存在如何被证明呢?它有有用的目的吗?
memcpy(dest, wchar_array, sizeof(wchar_array));
和
wmemcpy(dest, wchar_array, sizeof(wchar_array) / sizeof(wchar_t));
最佳答案
除了有关API对称性的davmac答案以及不总是授予数组大小的答案外,还应强调,wmemcpy
的第三个参数是指要复制的元素数(而不是字节)。
如果您使用wchar_t
对象并使用<wchar.h>
中的其他函数处理它们,则可能会很方便。例如,wcslen
以wchar_t
元素的形式返回C宽的字符串长度,wcschr
和wcsrchr
返回wchar_t *
,因此使用它们执行一些指针算法也使您处于元素数的“领域”。
P.S.如果您的示例中隐含了最小wchar_t
数组的大小,则使用wmemcpy
可能会产生比您使用的sizeof(wchar_array)
更优雅的代码:
#define SIZE 40
wchar_t wchar_array[SIZE];
// ...
wmemcpy(dest, wchar_array, SIZE);
关于c - 为什么当memcpy足够时,wmemcpy存在?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36487409/