c - 当 memcpy 应该足够时,为什么 wmemcpy 存在?

标签 c memcpy

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 宽字符串长度元素,和 wcschrwcsrchr返回 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/

相关文章:

C# 将结构数组复制到 double 组

c++ - 是否可以利用 is_trivially_copy_assignable 和 is_trivially_copy_constructible 进行优化?

谁能解释为什么下面的程序什么都不输出?

c++ - 为什么 (1/2)*x 不同于 0.5*x?

c - 在 list_for_each_entry 中使用 break 是否安全?

c - 不确定为什么冒泡排序代码有段错误

C++ memcpy 到数组的末尾

c - 如何将二维数组复制到临时二维数组中并返回它?

将结构复制到C中的数组

c++ - 子进程的异步双向 IO 重定向