C语言的内存函数

C语言内存函数

1.memcpy函数

语法:

void * memcpy(void*destination,const void *source,size_t num)
    

首先看返回类型,返回的是void *指针,其指向的是destination的首地址,destination也是void*指针,这表明destination可以接收任意类型的指针,而后面的 *source 被const修饰,这样限制了 *source,更安全.

memcpy函数从cpy这三个字母就可以看出这是一个与拷贝有关的函数是关于内存的.它可以这样描述:  函数memcpy从source位置开始向后复制num个字节的数到destination指向的内存地址.
该函数遇到'\0'不会停止.如果destination与source有任何重叠,结果都是未定义的,最好不要这么干,但是在VS2022中,是可以的其他的编译器未知.
那么下面对该函数进行简单的实现

void * my_memcpy(void * dest,const void * src,size_t num)
{
    void * ret=dest;
    while(num--)
{
    (char*)dest=(char*src);
    dest=(char*)dest+1;
    src=(char*)src+1;
}
    return ret;
}

int main()
{
    int arr1[10]={0};
    int arr2[5]={1,2,3,4,5};
    my_memcpy(dest,src,sizeof(int)*5);
    for(int i =0;i<sizeof(arr1)/sizeof(arr1[0]);i++)
    {
        printf("%d ",arr[i];
    }
return 0
}

2.memmove()

memmove函数比较强大,它可以处理重叠的内存块.该函数的功能和memcpy几乎一样.
语法:

viod * memmove(void * dest,const void * src,size_t num)

那么下面我们简单的实现一下:
 

void* my_memmove(void* dest, const void* src, size_t num)
{
	char* ret = dest;
	//当 dest<src  从前向后拷贝
		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;
}
int main()
{
	int arr1[10] = { 1,2,3,4,5,6,7,8,9,10 };
	my_memmove(arr1+2,arr1,20);
	for (int i = 0; i < sizeof(arr1) / sizeof(arr1[0]); i++)
	{
		printf("%d ", arr1[i]);
	}

	return 0;
}

3.memset函数

memset函数是用来设置内存,将内存里的值设置成想要的内容,使用代码如下:

int main ()
 {
     char str[] = "hello world";
     memset (str,'x',6);
     printf(str);
     return 0;
 }

对了这是语法:

void * memset ( void * ptr, int value, size_t num );

注意这个函数是以字节为单位操作,别的不行

4.memcpy

memcpy函数⽐较从ptr1和ptr2指针指向的位置开始,向后的num个字节 ,这个和strcpy很像,不过这个可以指定起始位置,来比较大小.
语法如下:

int memcmp ( const void * ptr1, const void * ptr2, size_t num );

使用方法可以参考下面代码:

int main()
{
 char buffer1[] = "DWgaOtP12df0";
 char buffer2[] = "DWGAOTP12DF0";
 int n;
 n = memcmp(buffer1, buffer2, sizeof(buffer1));
 if (n > 0) 
 printf("'%s' is greater than '%s'.\n", buffer1, buffer2);
 else if (n < 0) 
 printf("'%s' is less than '%s'.\n", buffer1, buffer2);
 else
 printf("'%s' is the same as '%s'.\n", buffer1, buffer2);
 return 0;
}

以上就是C语言的内存函数.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值