wmemcpy
似乎执行与 memcpy
相同的操作,但接受 wchar_t*
而不是 void*
。如果这两个代码片段应该具有相同的行为,它的存在如何证明是合理的?它有什么用处吗?
memcpy(dest, wchar_array, sizeof(wchar_array));
和
wmemcpy(dest, wchar_array, sizeof(wchar_array) / sizeof(wchar_t));
最佳答案
除了 davmac 关于 API 对称性和数组大小并不总是被授予的回答之外,应该强调的是 wmemcpy
的第三个参数。指的是要复制的元素数(而不是字节数)。
如果您使用 wchar_t
对象并使用 <wchar.h>
中的其他函数处理它们, 它可以促进事情。 wcslen
例如,根据 wchar_t
返回 C 宽字符串长度元素,和 wcschr
和 wcsrchr
返回 wchar_t *
,因此使用它们进行一些指针运算也可以让您处于元素数量的“领域”。
附言如果最小尺寸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/