memcpy函数用法详解
一、函数原型与功能
`memcpy`是C和C++标准库中的内存拷贝函数,其函数原型为:
```c
void *memcpy(void *dest, const void *src, size_t num);
```
参数说明
`dest`:目标内存区域的指针,需确保目标内存已分配且大小足够。
`src`:源内存区域的指针,指向要复制的数据起始位置。
`num`:要复制的字节数,需以`size_t`类型传递。
功能
从源地址`src`开始,向后复制`num`个字节到目标地址`dest`,遇到空字符`'\0'`时停止复制(若源数据中包含`'\0'`,则复制至该位置)。
二、使用要点
内存对齐与类型无关 - 源和目标内存区域无需对齐,且函数按二进制方式复制数据,与数据类型无关。
重叠内存风险
- 若源和目标内存区域重叠,`memcpy`行为未定义,可能导致数据覆盖或崩溃。此时需使用`memmove`函数。
返回值
- 返回指向目标内存区域`dest`的指针,便于链式操作(如`memcpy(dest, src, num); src = memcpy(src, dest, num);`)。
三、示例代码
1. 基本内存复制
```c
include include int main() { char source[] = "Hello, memcpy!"; char destination; // 复制字符串(含空字符) memcpy(destination, source, strlen(source) + 1); printf("源数据: %s\n", source); printf("拷贝后的数据: %s\n", destination); return 0; } ``` 2. 数组元素复制 ```c include int main() { int source[] = {1, 2, 3, 4, 5, 6, 7, 8, 9}; int destination; // 复制数组前5个元素 memcpy(destination, source, 5 * sizeof(int)); printf("源数组: "); for (int i = 0; i < 5; i++) { printf("%d ", source[i]); } printf("\n拷贝后的数组: "); for (int i = 0; i < 5; i++) { printf("%d ", destination[i]); } return 0; } ``` 3. 注意事项 确保目标内存大小足够,避免溢出。 若目标内存已初始化,`memcpy`会覆盖原有数据。 四、错误处理 参数验证: 建议在使用前检查`dest`和`src`是否为`NULL`。 内存分配 通过以上要点和示例,可有效掌握`memcpy`的用法及其注意事项。