题目:
自己定义一个函数,实现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;
}
本文出自 “无心的执着” 博客,转载请与作者联系!