深入理解memmove()与memcpy()的区别以及实现方法

 更新时间:2013年05月29日 16:51:44   作者:  
本篇文章是对memmove()与memcpy()的区别以及实现方法进行了详细的分析介绍,需要的朋友参考下

代码如下所示:
复制代码 代码如下:

// MemMove.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
using namespace std;

复制代码 代码如下:

void* memmove(void* dest, const void* src, size_t n)
{
 if (n <= 0)
 {
  cout << "Invalid count number." << endl;
 }
 if (dest == NULL || src == NULL)
 {
  cout << "The dest or src address is null." << endl;
 }
 if (dest == src)
 {
  cout << "The dest equals src." << endl;
 }
 if ((char*)dest <= (char*)src || (char*)dest >= (char*)src + n)
 {//对应图中2,3,4三种情况,赋值过程中,src中未使用的不会被覆盖
  char* de = (char*)dest;
  const char* sr = (const char*)src;
  while (n--)
  {
   *de++ = *sr++;
  }
 }
 else
 {//对应图中的第一种情况
  char* de = (char*)dest + n -1;
  const char* sr = (const char*)src + n - 1;
  while (n--)
  {
   *de-- = *sr--;
  }
 }
 return dest;
}

复制代码 代码如下:

void* memmcpy(void* dest, const void* src, size_t n) 

  if (n <= 0) 

  cout << "Invalid count number." << endl; 

 if (dest == NULL || src == NULL) 
 { 
     cout << "The dest or src address is null." << endl; 
 } 
 if (dest == src) 
 { 
   cout << "The dest equals src." << endl; 
 } 
 char* de = (char*)dest; 
 const char* sr = (const char*)src; 
 while (n--) 
 { 
   *de++ = *sr++; 
 } 
  return dest; 


复制代码 代码如下:

int _tmain(int argc, _TCHAR* argv[])
{
 char* p = "hello,world"; 
 char dest[12] = {0};
 char *q = (char*)memmove(dest,p,5);
 cout << dest << endl;   
 cout << q << endl; 
 return 0;  
}

相关文章

  • C语言深入细致讲解动态内存管理

    C语言深入细致讲解动态内存管理

    动态内存是相对静态内存而言的。所谓动态和静态就是指内存的分配方式。动态内存是指在堆上分配的内存,而静态内存是指在栈上分配的内存,本文带你深入探究C语言中动态内存的管理
    2022-05-05
  • C++ vtordisp的应用场景分析

    C++ vtordisp的应用场景分析

    文章介绍了C++中的vtordisp机制,用于在虚继承和虚函数结合的场景下,确保构造函数和析构函数中对虚基类指针的正确调整,文章详细解释了vtordisp的基本概念、应用场景以及编译器相关的考虑,感兴趣的朋友一起看看吧
    2025-01-01
  • C语言数组应用实现三子棋游戏

    C语言数组应用实现三子棋游戏

    这篇文章主要为大家详细介绍了C语言数组应用实现三子棋游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06
  • C++计算每个字符出现的次数

    C++计算每个字符出现的次数

    这篇文章主要介绍了C++计算每个字符出现的次数的相关资料,需要的朋友可以参考下
    2016-05-05
  • C语言编写五子棋游戏

    C语言编写五子棋游戏

    这篇文章主要为大家详细介绍了C语言编写五子棋游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-02-02
  • C语言规律循环累加求和案例

    C语言规律循环累加求和案例

    这篇文章主要介绍了C语言规律循环累加求和案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • C++ 基于BFS算法的走迷宫自动寻路的实现

    C++ 基于BFS算法的走迷宫自动寻路的实现

    这篇文章主要为大家介绍了C++ 基于BFS算法实现走迷宫自动寻路,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • C语言中魔性的float浮点数精度问题

    C语言中魔性的float浮点数精度问题

    这篇文章主要介绍了魔性的float浮点数精度问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • 详细了解C语言二叉树的建立与遍历

    详细了解C语言二叉树的建立与遍历

    这篇文章主要介绍了C中二叉树的建立和各种遍历实例代码,涉及树节点的定义,后序遍历,层序遍历,深度优先和广度优先等相关内容,具有一定借鉴价值,需要的朋友可以参考下
    2021-07-07
  • C++求四个正整数最大公约数的方法

    C++求四个正整数最大公约数的方法

    这篇文章主要介绍了C++求四个正整数最大公约数的方法,涉及C++求余算法的运用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2016-05-05

最新评论