C语言memcpy()函数:复制内存中的内容
memcpy()函数
头文件和函数原型
#include <string.h>
void* memcpy(void* restrict s1,
const void* restrict s2,
size_t n);
参数说明:
s1
:指向目标内存的指针,表示复制的目标位置;s2
:指向源内存的指针,表示要复制的数据来源;n
:要复制的字节数;
描述
memcpy()
是C语言标准库中的一个函数,用于将一段内存的内容复制到另一段内存中;
memcpy()
函数将s2
指向的对象中的n
个字符复制到s1
指向的对象;当n
为0时,函数不会执行任何复制操作;
在使用memcpy()
函数时,应确保参数的合法性,包括源指针和目标指针的有效性以及要复制的字节数的正确性;
返回值
返回目标内存的指针,也就是s1
的值;
示例代码
示例一
该示例演示了如何使用memcpy()
函数正确的复制字符串;
#include <stdio.h>
#include <string.h>
#include <assert.h>
int main() {
char str1[] = "hello world!";
char str2[100];
char* p;
//将str1复制到str2中
p = memcpy(str2, str1, strlen(str1) + 1);
//memcpy返回的指针与str2相同
assert(p == str2);
printf("%s\n", str2);
}
程序运行结果
hello world!
需要注意的是,memcpy()
函数只是简单的按字节复制内存中的内容,不会考虑字符串的结构和终止符;所以在复制字符串时,要复制的长度应该为字符串的长度+1;
示例二
该示例演示了如何使用memcpy()
函数正确的复制数组;
#include <stdio.h>
#include <string.h>
#include <assert.h>
int main() {
int array1[10];
for (int i = 0; i < 10; i++) {
*(array1 + i) = i;
}
int array2[10];
memcpy(array2, array1, sizeof(int) * 10);
for (int i = 0; i < 10; i++) {
printf("%d ", array2[i]);
}
}
程序运行结果
0 1 2 3 4 5 6 7 8 0