C语言初阶-内存操作函数memcpy、memove、memcmy

目录

一、memcpy函数

         1.memcpy使用方法

         2.memcpy模拟实现

二、memove函数

         1.memove使用方法

         2.memove模拟实现

三、memcmy


一、memcpy函数

      1.memcpy使用方法

             头文件:#include<string.h>

             使用:memcpy(目标空间指针,被复制空间指针,复制空间大小) 

                        memcpy返回值为目标空间指针

             例:

#include<stdio.h>
int main()
{
	char arr1[10] = "abcdef";
	char arr2[10] = { 0 };
	memcpy(arr2, arr1, 6);
	printf("%s", arr2);
}

          注意:1.数组名即为第一个数组元素的指针

                     2.目标空间必须足够大,不能小于复制空间大小

                     3.当被复制空间和目标空间有重叠时(同一个数组),不能使用memcpy ,用memmove

      2.memcpy模拟实现

#include<stdio.h>
#include<assert.h>
char* my_memcpy(void* dest, const void* src, int num)//为了程序的普适性 所以参数为void指针
{
	void* tmp = dest;//稍后将返回目标空间原指针,所以先创建变量保存
	assert(dest && src);//声明 当dest和src均不为空指针是程序才能运行(引用头文件<assert.h>)
	while (num--)
	{
		*(char*)dest = *(char*)src;//char*为操作移动最小的指针类型,所以用char*
		dest = (char*)dest + 1;
		src = (char*)src + 1;
	}
	return tmp;
}

int main()
{
	char arr1[10] = "abcdef";
    char arr2[10] = { 0 };
    my_memcpy(arr2, arr1, 6);
    printf("%s", arr2);
}

二、memmove函数

    1.memmove使用方法

             头文件:#include<string.h>

             使用:memmove(目标空间指针,被复制空间指针,复制空间大小) 

                        memmove返回值为目标空间指针

      2.memmove模拟实现

#include<stdio.h>
#include<assert.h>
char* my_memmove(void* dest, const void* src, int num)
{
	char* tmp = dest;
	if (dest > src)
	{
		while (num--)
		{

			*(((char*)dest) + num) = *(((char*)src) + num);
		}

	}
	else
	{
		while (num--)
		{
			*(char*)dest = *(char*)src;
			dest = (char*)dest + 1;
			src = (char*)src + 1;
		}
	}
}
int main()
{
	char arr1[10] = "abcdef";
	my_memmove(arr1+1, arr1, 6);
	printf("%s", arr1);
}

三、memcmy 内存比较

   

             头文件:#include<string.h>

             使用:memcmy(被比较空间1的指针,被比较空间2的指针,比较空间大小) 

             返回值:空间1比空间2元素少返回<0

                           空间1比空间2元素少返回>0

                           空间1和空间2元素一样多返回0

猜你喜欢

转载自blog.csdn.net/chara9885/article/details/125920721
今日推荐