C语言:模拟实现memmove

原创 2016年05月30日 17:15:27

     模拟实现内存移动函数memmove:

      我的代码是关于将字符数组

{1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }

中的3,4,5,6移动到5,6,7,8位置处。这个内存移动涉及到解决了内存重叠的问题,而memcmp()函数http://10740184.blog.51cto.com/10730184/1714516没有解决。为防止覆盖,若不内存重叠时就正常如strcpy拷贝,否则就从后往前拷贝。size-t count指的是字节数,4个整型的元素字节数。src =src +8,指的是前面有两个整形的字节数。dest指的是前面有四个整形的字节数。

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>

void *my_memmove(void *p1, void *p2, size_t count)
{
    assert(p1);
    assert(p2);
    char *dest = (char *)p1;
    char *src = (char *)p2;
    dest = dest + 16;
    src = src + 8;
    if ((src < dest) && (dest < src + count))
    {
        while (count--)
        {
            *(dest + count) = *(src + count);
        }
    }
    else
    {
        while (count--)
        {
            *dest = *src;
            src++;
            dest++;
        }
    }
    return p2;
}

int main()
{
    int arr1[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    int i = 0;
    int len = sizeof(arr1) / sizeof(arr1[0]);
    int *ret = my_memmove(arr1, arr1, 16);
    for (i = 0; i < len; i++)
    {
        printf("%d ", *(ret + i));
    }
    system("pause");
    return 0;
}


C语言之memmove函数

【FROM MSDN && 百科】 原型:  void *memmove( void* dest, const void* src, size_tcount ); #include...
  • hgj125073
  • hgj125073
  • 2013年01月05日 16:24
  • 10458

memmove 和 memcpy的区别以及处理内存重叠问题

memmove 和 memcpy的区别以及处理内存重叠问题
  • Li_Ning_
  • Li_Ning_
  • 2016年05月15日 19:30
  • 10495

【C语言】模拟实现strcpy、strcat、strcmp函数

strcpy、strcat、strcmp这三个库函数是初级学习阶段经常写到的三个库函数,也是一些大公司比较喜欢出的面试题。今天,就尝试用my_strcpy、my_strcat、my_strcmp这三个...
  • Monster_Girl
  • Monster_Girl
  • 2016年07月31日 19:06
  • 2237

C语言 模拟实现memmove

memmove考虑到了字符重叠的问题,因此可能出现以下三种情况 第一种 dest与src有重叠,src>dest,这种情况只需按照平常的拷贝方式,从前往后拷贝 第二种 dest与src有重叠,...
  • jelly_gemini
  • jelly_gemini
  • 2016年11月06日 21:26
  • 190

c语言模拟实现memmove

为什么写这篇博客,因为我很多次都被它考住了!!!!!!!!!! 首先 memmove 是一个内存操作函数,不是字符串操作函数,它可以处理多种类型的数据。 它的原型是:void *memmo...
  • LLZK_
  • LLZK_
  • 2016年06月02日 23:48
  • 819

【C语言】模拟实现memmove

memmove用于从src拷贝count个字符到dest,如果目标区域和源区域有重叠的话,memmove能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中。 如果没有重叠,它可以像memcpy效...
  • pointer_y
  • pointer_y
  • 2016年06月04日 20:22
  • 326

c语言内存管理函数,模拟memcpy、memmove(实现内存重叠拷贝)、memset

c语言内存管理函数,模拟memcpy、memmove(实现内存重叠拷贝)、memset
  • bin_ge_love
  • bin_ge_love
  • 2016年06月04日 00:11
  • 350

C语言模拟实现memcpy、memmove、memset

1,模拟实现memcpy功能:内存拷贝函数 代码:void* my_memcpy(void* dest, void* src, size_t n) { void* ret = dest; ...
  • ChaseRaod
  • ChaseRaod
  • 2017年07月10日 17:34
  • 233

C语言 string及memcpy,memmove函数的模拟实现

模拟实现部分字符串操作函数及内存拷贝函数
  • wei_cheng18
  • wei_cheng18
  • 2017年07月07日 21:52
  • 131

【C语言】memcpy函数和memmove函数的实现与区别

C语言
  • SuLiJuan66
  • SuLiJuan66
  • 2015年04月16日 23:46
  • 447
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C语言:模拟实现memmove
举报原因:
原因补充:

(最多只允许输入30个字)