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>中的其他函数处理它们,则可能会很方便。例如,wcslenwchar_t元素的形式返回C宽的字符串长度,wcschrwcsrchr返回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/

10-08 22:12