C语言-内存函数

1,memcpy

2,memmove

3,memcmp

4,memset

------------------------------------------------------------------------------------------------------------------

1,memcpy

复制代码
#include<stdio.h>
//memcpy
//内存拷贝函数

//int main() {
//	int arr1[] = { 1,2,3,4,5,6,7,8,9,10 };
//	int arr2[20] = { 0 };
//	memcpy(arr2, arr1, 20);//注意memcpy的函数参数类型是void    (20字节,对应5个int数  )
//	int i = 0;
//	for ( i = 0; i < 5; i++)
//	{
//		printf("%d ", arr2[i]);
//	}
//
//	return 0;
//}

//模拟实现memcpy
#include<assert.h>
//void* my_memcpy(void* dest, const void* src, size_t num) {
//	assert(dest && src);
//	void* ret = dest;
//	while (num--) {
//		*(char*)dest = *(char*)src;
//		dest = (char*)dest + 1;
//		src = (char*)src + 1;
//
//	}
//	return ret;
//}
//
//void test1() {
//	int arr1[] = { 1,2,3,4,5,6,7,8,9,10 };
//	int arr2[20] = { 0 };
//	my_memcpy(arr2, arr1, 20);//注意memcpy的函数参数类型是void    (20字节,对应5个int数  )
//	int i = 0;
//	for (i = 0; i < 10; i++)
//	{
//		printf("%d ", arr2[i]);
//	}
//	printf("\n");
//}
#include<string.h>
void test2() {
	int arr1[] = { 1,2,3,4,5,6,7,8,9,10 };
	//my_memcpy(arr1+2, arr1, 20);//注意memcpy的函数参数类型是void    (20字节,对应5个int数  )
	memmove(arr1 + 2, arr1, 20);
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		printf("%d ", arr1[i]);
	}
}
int main() {
	test1();
	test2();

	return 0;
}
//memcpy 负责拷贝两块独立空间中的数据
//重叠内存的拷贝,是怎么做的呢?  ===>memmove

2,memmove

复制代码
//模拟实现memmove
#include<stdio.h>
#include<string.h>
//void* my_memmove(void* dest, const void* src, size_t num) {
	assert(dest && src);
	void* ret = dest;
	if (dest<src)
	{
		//前->后
		while (num--) {
			*(char*)dest = *(char*)src;
			dest = (char*)dest + 1;
			src = (char*)src + 1;
		}
	}
	else
	{
		//后->前
		while (num--) {
			*((char*)dest+num) = *((char*)src+num);
		}
	}
	return ret;
}
void test3() {
	int arr1[] = { 1,2,3,4,5,6,7,8,9,10 };
	//my_memcpy(arr1+2, arr1, 20);//注意memcpy的函数参数类型是void    (20字节,对应5个int数  )
	my_memmove(arr1 , arr1+2, 20);// 将 3,4,5,6,7  移到 1,2,3,4,5
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		printf("%d ", arr1[i]);
	}
}
int main() {
	//test1();
	test3();

	return 0;
}

3,memcmp

复制代码
#include<stdio.h>
//memcmp 
// 
int main() {
	int arr1[] = { 1,2,3,4,5 };//10 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 05 00 00 00
	int arr2[] = { 1,3,2 };//01 00 00 00 03 00 00 00 02 00 00 00
	int ret = memcmp(arr1, arr2, 12);
	printf("%d\n", ret);
	return 0;
}

4,memset

复制代码
#include<stdio.h>
//memset
int main() {
	char arr[] = "hello bit";
	memset(arr, 'x', 5);
	//memset(arr+6, 'x', 3);
	printf("%s\n", arr);
	//int arr[10] = { 0 };
	////把arr初始化全为一
	//memset(arr, 1, 40);
	//int i = 0;
	//for ( i = 0; i < 10; i++)
	//{
	//	printf("%d\n", arr[i]);
	//}
	return 0;
}
相关推荐
狗凯之家源码网11 分钟前
PHP 用户反馈系统源码深度评测与实战指南
开发语言·php·用户反馈系统
白帽攻防录18 分钟前
SRC 挖洞:WSO2 JWT 算法混淆绕过深度复盘,CVE-2026-5430 不支持的算法怎么变成管理员
网络·算法·安全·网络安全·jwt
白山编程大哥24 分钟前
Lua 中使用 C 语言的用户自定义类型——userdata
c语言·junit·lua
谢亮_vipxieliang1 小时前
Stream API 不是银弹:常见坑与性能建议
java·开发语言
无敌贵点大王1 小时前
RTThread学习记录13——关于要使用一个外设,RTThread与cubemx到底要怎么配合?
c语言·stm32·学习·rtthread
小O的算法实验室1 小时前
IEEE TEVC,基于精确与DQN群智能调度方法用于多目标异构USV
算法
迅猛龙办公室1 小时前
实现第一个python程序(HelloWorld)
开发语言·python
phltxy1 小时前
C 语言动态内存管理:从申请空间到安全释放
c语言·开发语言·ui
可乐鸡翅yeah_1 小时前
M3U8 防盗链 URL‑Token 签名,新手开发实操避坑
开发语言·javascript·ios·音视频·safari
2603_965896621 小时前
JS原型与原型链|对象继承与实例底层原理
开发语言·javascript·原型模式