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实现switch语句,没错!是Switch语句 Python中是没有switch语句的;条件判断只能使用if…else…这样的语句;但是伟大的劳动人民是非常有头脑的,我们总有办法。
Python实现字符串大小写转换 你可能会使用字符串的upper()方法将字符串中的字母全部转换成大写,或使用lower()方法将字符串中的字母全部转换成小写;那如何将字符串中的大写转换成小写、小写转换从大写呢?本文将使用Python实现这一功能;
使用Rust实现CRC32算法 CRC32是一种循环冗余校验码(Cyclic Redundancy Check)算法,通常用于数据传输或存储中的错误检测。该算法通过对输入数据进行位操作和模2除法来生成一个32位的校验码,该校验码可以用于验证输入数据是否已经损坏或被篡改。
PySide6 exec()函数详细教程 PySide6.QtWidgets.Application类的exec()函数使程序进入Qt主事件循环并等待直到调用exit()函数,然后返回调用exit()时设置的值,如果调用的是quit()函数,则是0;此处的exit()和quit()函数是QApplication类的成员函数;
Python函数修饰符@的详细教程 Python函数修饰符@的作用是为现有的函数增加额外的功能;其作用非常强大,今天我们就来谈谈它是如何在日志记录中起到很好的作用的。
Python __import__()函数 __import__() 函数是一个高级函数,用于动态地导入模块。与 import 语句不同,__import__() 函数可以在运行时动态地导入模块,使得程序可以更加灵活地处理模块的导入。