c语言实现memcpy和memmove
时间: 2024-08-15 13:08:25 浏览: 43
C++中memcpy和memmove的区别总结
在C语言中,`memcpy()` 和 `memmove()` 都是用来复制内存的函数,但它们处理相同的操作略有不同:
1. **memcpy()** 函数:
- 它用于将源地址的数据完全复制到目标地址指定的位置,如果目标区域和源区域有重叠,则可能导致数据混乱。
- 语法:`void* memcpy(void* dest, const void* src, size_t n);`
- 参数:
- `dest`:目标缓冲区的起始地址。
- `src`:源缓冲区的起始地址。
- `n`:要复制的字节数。
2. **memmove()** 函数:
- memmove() 更加谨慎,当源和目标区域重叠时,它会绕过重叠部分,保证数据完整性,因为它是先移动源区域到目标区域后部,再把剩余的数据复制过去。
- 语法:`void* memmove(void* dest, const void* src, size_t n);`
- 功能类似于 memcpy(),只是添加了对重叠区域的处理。
使用示例(假设已经包含了 `<string.h>` 头文件):
```c
#include <string.h>
// 使用memcpy()
char source[10] = "Hello";
char destination[10];
memcpy(destination, source, sizeof(source)); // 直接复制
// 使用memmove()
destination = '!';
memmove(destination, source, sizeof(source)); // 如果 source 和 destination 重叠,memmove 会绕过 '!' 字符
```
阅读全文