实现memcpy和memmove函数

来源:互联网 发布:钓炸天盗号软件app 编辑:程序博客网 时间:2024/05/21 01:51

题目:

       自己定义一个函数,实现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;}


本文出自 “无心的执着” 博客,转载请与作者联系!

0 0
原创粉丝点击