您的位置:首页 > 其它

实现memcpy和memmove函数

2015-11-20 21:54 253 查看
题目:
自己定义一个函数,实现my_memcpy和my_memmove函数。

题目分析:
memcpy函数主要实现的是内存的拷贝,函数接受任意类型的参数,并且有拷贝个数的限制,函数与strcpy函数在功能上有相似点,也有不同点。memmove函数在memcpy函数的基础上解决了内存重叠的问题。下面是memcpy和memmove函数的实现:

my_memmove函数:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>

//实现内存拷贝函数
void *my_memcpy(void *p1, const void *p2, size_t count)
//count为内存的大小(所拷贝的字节数)
{
assert(p1);
assert(p2);
char *dst = (char *)p1;   //将p1、p2强制类型转换为字符指针类型
char *str = (char *)p2;
while (count--)
{
*dst++ = *str++;
}
return p1;
}

int main()
{
char dst[10] = {0};
char str[] = "abcdef";
my_memcpy(dst, str, 4);
printf("%s\n", dst);
system("pause");
return 0;
}


my_memmove函数:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>

//实现内存移动
void *my_memmove(void *p1, const void *p2, size_t count)
{
assert(p1);
assert(p2);
char *dst = (char *)p1;
char *str = (char *)p2;
if (*dst > *str && *dst < *(str + count))
{
while (count--)         //从前往后拷贝
{
*(dst + count) = *(str + count);
}
}
else
{
while (count--)            //从后向前拷贝
{
*dst++ = *str++;
}
}
return dst;
}

int main()
{
char dst[10] = "abcdefg";
char str[] = "def";
my_memmove(dst, str, 2);
printf("%s\n", dst);
system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息