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

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

【C语言】模拟实现memmove

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

C语言 模拟实现memmove

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

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

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

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

1,模拟实现memcpy功能:内存拷贝函数 代码:void* my_memcpy(void* dest, void* src, size_t n) { void* ret = dest; ...

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

模拟实现部分字符串操作函数及内存拷贝函数

C语言memmove函数

/* memmove的函数原型: void *memmove(void *dst,const void *src,size_t count); 头文件:#include 作用是:实现内存的重叠拷贝...
  • ZDF0414
  • ZDF0414
  • 2015年05月24日 15:17
  • 303

细谈C语言中的strcpy,strncpy,memcpy,memmove,memset函数 .

细谈C语言中的strcpy,strncpy,memcpy,memmove,memset函数                            摘自http://blog.csdn.net/p...

C语言比较重要的库函数memcpy memmove和内存重叠的问题

下面重点来讲解memcpy和memmove的区别: 这两个函数的函数原型(除了名字)是一样的: void *memcpy(void *dst, const void *src, size_t coun...
  • sole_cc
  • sole_cc
  • 2015年05月07日 18:46
  • 470

细谈C语言中的strcpy,strncpy,memcpy,memmove,memset函数

一.函数介绍: 1、memcpy 函数原型:extern void *memcpy(void *dest, const void *src, size_t count); 用法:#include...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C语言:模拟实现memmove
举报原因:
原因补充:

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