---
title: memcpy
description: "将源内存区域的内容复制到目标内存区域。两块内存区域不允许重叠，否则会导致未定义行为。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengboostkithistory/252RC1/accel/kunpengaccel_ksl_16_0209.html
sourcePath: /source/zh/kunpengboostkithistory/252RC1/accel/kunpengaccel_ksl_16_0209.html
indexId: 2e63be24f499b4574f320c41e23d21f1a95b05603937f134316fe4839835bf3e76
---
# memcpy

#### 函数功能

将源内存区域的内容复制到目标内存区域。两块内存区域不允许重叠，否则会导致未定义行为。


#### 函数定义

```
void *memcpy(void *dest, const void *src, size_t num);
```


#### 参数说明

| 参数名 | 描述 | 取值范围 | 输入/输出 |
| --- | --- | --- | --- |
| dest | 指向用于存储复制内容的目标内存指针。 | 非空指针，指向有效内存，至少有num字节可访问。 | 输入/输出 |
| src | 指向要复制的数据源内存指针。 | 非空指针，指向有效内存，至少有num字节可访问。 | 输入 |
| num | 被复制的字节数。 | 非负数，不超过实际可分配内存大小。 | 输入 |


#### 返回值

- 成功：返回指向目标存储区内存的指针。
- 失败：对标开源Glibc，不返回特殊异常值。

如果源和目标内存区域有重叠，应该使用memmove，因为memcpy无法安全处理重叠内存。


#### 示例

```
#include <stdio.h>
#include <string.h>
int main() {
char source[] = "Hello, World!";
char destination[20];
memcpy(destination, source, strlen(source) + 1);
printf("Source: %s\n", source);
printf("Destination: %s\n", destination);
return 0;
}
```

运行结果：

```
Source: Hello, World!
Destination: Hello, World!
```
