c语言的内存函数

2023-12-15 15:57:55

memcpy函数

1.调用形式void*memcpy(void*p1,void*p2,int n),表示从第二个位置复制n个字节到第一个位置,而指针类型为void的原因是他可以复制整型字符型甚至指针结构体类型的数据

2.在遇到'\0'的时候不会停下来,因为函数执行拷贝靠字节数,且拷贝对象不一定是字符串,遇到'\0'时拷贝'\0'

3.拷贝和被拷贝对象不能重叠,重叠时此函数不处理重叠部分,不执行重叠部分的值的复制(可以取数组内部的项验证一下)

4.模拟实现

#include<stdio.h>


void* mymemcpy(void* p1, const void* p2,int n)
{
	int i = 0;
	for (i = 0; i < n; i++)
	{
		*(char*)p1 = *(char*)p2;
		p1 = (char*)p1 + 1;
		p2 = (char*)p2 + 1;

	}
	return p1;
}
int main()
{
	int arr[5] = { 1,2,3,4,5 };
	int arr1[5];
	mymemcpy((void*)arr1, (const void*)arr, 20);
	int i = 0;
	for (i = 0; i < 5; i++)
	{
		printf("%d", arr1[i]);
	}
	return 0;
}

5.改进实现:在后面空间小于前面空间时采用从最后一项向前拷贝

6.当地址重叠的时候使用memmove函数

memset函数

1.作用:设置内存

2.调用形式:void*memset(void* p1,int num,size_t good),一个字节一个字节地将内存空间改变为num的值,改变good个字节

memcmp函数

1.调用形式:int memcmp(const void*p1,const void*p2,size_t num),用法和strcmp相同,只不过这次比的是内存空间,size_t为字节数

文章来源:https://blog.csdn.net/whcwhc111111/article/details/134896897
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。