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

原创内容,如需转载,请注明出处;

本文地址: https://www.perfcode.com/c-functions/memcpy.html

分类: 计算机技术
推荐阅读:
Python globals()函数 globals() 是 Python 内置函数之一,用于返回当前全局作用域中所有变量的字典。这个字典包含了所有已定义的全局变量,键为变量名,值为对应的值。可以通过修改这个字典中的变量来更新全局作用域中的变量。
Golang捕获Ctrl+C的系统信号并作出响应 通常,当操作系统要停止你的进程时,会向你的进程发送信号,如果你需要在进程结束前处理一些事务,那么你需要捕获这些信号;
Rust column宏的用法和示例 在 Rust 中,column宏可以获取调用它所在位置的列号,为开发人员提供有关源代码中位置的调试信息;
Golang获取CPU物理核心数 在Go语言中,可使用runtime包中的NumCPU()函数获取CPU的物理核心数;
C语言使用fork()系统调用创建子进程 有些时候,创建多个子进程可用于提高任务处理效率或提高程序的并发性;在Linux系统下可使用fork()系统调用创建一个新的子进程;
CreateThread()创建线程传递SOCKET参数 使用CreateThread()创建线程传递SOCKET参数的正确方法如下: