memcpy函数用法

时间:2025-03-31 16:46:56 计算机

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`。

内存分配:使用`malloc`或`calloc`动态分配内存时,需检查返回值是否为`NULL`。

通过以上要点和示例,可有效掌握`memcpy`的用法及其注意事项。