【C语言】内存操作函数

【C语言】内存操作函数



前言

内存操作函数,memset,memcpy,memmove,memcmp ,本文章将详细介绍这些函数的使用和用法。


memset

#include <string.h>
void *memset(void *s, int c, size_t n);
功能:将s的内存区域的前n个字节以参数c填入
参数:
s:需要操作内存s的首地址
c:填充的字符,c虽然参数为int,但必须是unsigned char , 范围为0~255
n:指定需要设置的大小
返回值:s的首地址

//memset
void test01()
{
	int* p = malloc(sizeof(int) * 10);

	memset(p, 0, 40);

	for (int i = 0; i < 10; i++)
	{
		printf("%d", p[i]);
	}
	free(p);



	char ch[10];
	memset(ch, 'A', sizeof(char)*10);
	
	printf("%s\n", ch);//没有'\0'
}

memcpy

#include <string.h>
void *memcpy(void *dest, const void *src, size_t n);
功能:拷贝src所指的内存内容的前n个字节到dest所值的内存地址上。
参数:
dest:目的内存首地址
src:源内存首地址,注意:dest和src所指的内存空间不可重叠,可能会导致程序报错
n:需要拷贝的字节数
返回值:dest的首地址

//memcpy
void test02()
{
	int arr[10] = { 0,1,2,3,4,5,6,7,8,9 };

	int* p = (int*)malloc(sizeof(int) * 10);
	memset(p, 0, sizeof(int) * 10);
	for (int i = 0; i < 10; i++)
	{
		printf("%d\n", p[i]);
	}

	printf("----------------\n");

	memcpy(p, arr, sizeof(int) * 10);

	for (int i = 0; i < 10; i++)
	{
		printf("%d\n", p[i]);
	}

	free(p);



	char ch[] = "leng\0 bai bai";
	char str[100];
	 //字符串拷贝遇到\0停止
	//strcpy(str,ch);	//hello
	//内存拷贝 拷贝的内容和字节有关
	memcpy(str, ch, 14);
	for (int i = 0; i < 14; i++)
	{
		printf("%c\n", str[i]);
	}

	int arr2[] = { 0,1,2,3,4,5,6,7,8,9 };
	//如果拷贝的目标和源发生重叠,可能报错
	memcpy(&arr2[5], &arr2[3], 20);
	for(int i=0;i<10;i++)
	{
		printf("%d", arr2[i]);

	}


}

memmove

memmove()功能用法和memcpy()一样,区别在于:dest和src所指的内存空间重叠时,memmove()仍然能处理,不过执行效率比memcpy()低些。

//memmove
void test03()
{
	int arr[10] = { 1,2,3,4,5,6,7,8,9 };
	memmove(&arr[5], &arr[3],20);
	for (int i = 0; i < 10; i++) 
	{
		printf("%d ", arr[i]);  

	}
}

memcmp

#include <string.h>
int memcmp(const void *s1, const void *s2, size_t n);
功能:比较s1和s2所指向内存区域的前n个字节
参数:
s1:内存首地址1
s2:内存首地址2
n:需比较的前n个字节
返回值:
相等:=0
大于:>0
小于:<0

//memcmp
void test04()
{
	int arr1[] = { 1,2,3,4,5,6,7,8,9,10 };
	int arr2[] = { 1,2,3,4,5 };

	int value=memcmp(arr1, arr2, 20);
	printf("%d\n", value);
}

总结

到这里这篇文章的内容就结束了,谢谢大家的观看,如果有好的建议可以留言喔,谢谢大家啦

  • 27
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值