std::memmove_C++中文网
从 src 所指向的对象复制 count 个字节到 dest 所指向的对象。两个对象都被转译成 unsigned char 的数组。
如同复制字符到临时数组,再从该数组到 dest 一般发生复制。
若对象潜在重叠或不可平凡复制 (TriviallyCopyable) ,则 memmove 的行为未指定,且可能未定义。
参数
| dest | - | 指向复制目的的内存位置的指针 |
| src | - | 指向复制来源的内存位置的指针 |
| count | - | 要复制的字节数 |
返回值
dest
注意
尽管说明了“如同”使用临时缓冲区,此函数的实际实现不会带来二次复制或额外内存的开销。常用方法( glibc 和 bsd libc )是若目标在源之前开始,则从缓冲区开始正向复制,否则从末尾反向复制,完全无重叠时回落到更高效的 std::memcpy 。
示例
#include <iostream> #include <cstring> int main() { char str[] = "1234567890"; std::cout << str << '\n'; std::memmove(str + 4, str + 3, 3); // 从 [4, 5, 6] 复制到 [5, 6, 7] std::cout << str << '\n'; }
输出:
参阅
| 复制一个缓冲区到另一个 (函数) | |
| 以一个字符填充缓冲区 (函数) | |
| 在两个可能重叠的数组间复制一定量宽字符 (函数) | |
| (C++11) |
将某一范围的元素复制到一个新的位置 (函数模板) |
| 按从后往前的顺序复制一个范围内的元素 (函数模板) | |
| (C++11) |
检查类型是否可平凡复制 (类模板) |