欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

關于memcpy和memmove的一點重要說明

 更新時間:2016年12月22日 09:56:52   投稿:jingxian  
下面小編就為大家?guī)硪黄P于memcpy和memmove的一點重要說明。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

今天看到書上降到memcpy和memmove的區(qū)別才突然發(fā)現原來兩者之間有如此區(qū)別,以前只知道這兩個函數是

實現同樣的功能,沒有接觸到其不同。

memcpy和memmove在MSDN的定義如下:

從兩者的聲明來看的確沒有區(qū)別,我們來看這樣一個例子

當我們需要將char* src="abcde"這個字符串全部copy到dest中然而src與dest在內存中大概是這樣存在的:

內存地址   低------>高

src   dest
1  2  3  4  5   6
[ a ][ b ][ c ][ d ][ e ][ '\0' ][ ][ ][ ][ ][ ][ ][ ]

src地址為內存1,目的地址為內存2此時很明顯內存出現了重疊,當我們拷貝字符a到第三個內存位置的時

a將覆蓋src內存中的第三個字符 這種情況在memcpy未定義然而memmove卻給出了正確的處理方式

解決方法,試想當我們先將dest地址移動dest+n-1同時src地址移動src+n-1這樣再從src的最后一個元素開

始逐個向前拷貝到dest中就完美的避免了內存重疊導致的元素覆蓋問題呢

下面我們根據memcpy和memmove給出自己的實現:

#include <iostream>
using namespace std;

void *memcopy( void *dest, const void *src, size_t count )
{
  if(dest==NULL||src==NULL)
    return NULL;
  char* Dest=(char*)dest;
  const char* Src=(char*)src;
  
  int i=0;
  
  while(i<count)
  {
    *Dest++=*Src++;
    i++;
  }
  
  return dest;
}

void *memmove(void *dest,const void *src,size_t count )
{
  if(dest==NULL||src==NULL)
    return NULL;

  char* Dest=(char*)dest;
  const char* Src=(char*)src;
  
  int i=0;
  if(src>dest)
  {
    while(i<count)//正向拷貝
    {
      *Dest++=*Src++;
      i++;
    }
  }
  else
  {
    Dest=Dest+count-1;//反向拷貝
    Src=Src+count-1;

    while(i<count)
    {
      *Dest--=*Src--;
      i--;
    }
  }

  
  
  return dest;
}



void main()
{
  char dest[80];
  memset(dest,'\0',80);
  char* src="memcpyteststring";
  int n;
  cout<<"How many char you want to copy from src to dest(memcpy): ";
  cin>>n;
  cout<<"The dest string is: "<<(char*)memcopy(dest,src,n)<<endl;
  cout<<"How many char you want to copy from src to dest(memcpy): ";
  cin>>n;
  cout<<"The dest string is: "<<(char*)memmove(dest,src,n)<<endl;
  return;
}

運行截圖:

以上就是小編為大家?guī)淼年P于memcpy和memmove的一點重要說明全部內容了,希望大家多多支持腳本之家~

相關文章

  • C語言實現最全自動售貨機

    C語言實現最全自動售貨機

    這篇文章主要為大家詳細介紹了C語言實現最全自動售貨機,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • C語言中時間戳轉換成時間字符串的方法

    C語言中時間戳轉換成時間字符串的方法

    在PE格式里有個字段是文件的創(chuàng)建時間戳,我想把轉成字符串,今天小編給大家分享一段代碼,可以比較直觀的看出,需要的的朋友參考下
    2017-02-02
  • C語言如何實現圖片文件的復制

    C語言如何實現圖片文件的復制

    這篇文章主要為大家詳細介紹了C語言中實現圖片文件的復制的相關方法,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-12-12
  • C語言堆與二叉樹的順序結構與實現

    C語言堆與二叉樹的順序結構與實現

    堆是計算機科學中一類特殊的數據結構的統(tǒng)稱,通常是一個可以被看做一棵完全二叉樹的數組對象。而堆排序是利用堆這種數據結構所設計的一種排序算法。本文將詳細介紹堆與二叉樹的順序結構與實現,需要的可以參考一下
    2022-05-05
  • 一篇文章帶你入門C語言:數組

    一篇文章帶你入門C語言:數組

    這篇文章主要介紹了C語言中數組的一些基本知識小結,其中重點是對于數組的內存分配相關方面的知識整理,需要的朋友可以參考下
    2021-08-08
  • ubuntu中打開終端的三種解決方法

    ubuntu中打開終端的三種解決方法

    本篇文章是對ubuntu中打開終端的三種方法進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • 淺談C語言之字符串處理函數

    淺談C語言之字符串處理函數

    下面小編就為大家?guī)硪黄獪\談C語言之字符串處理函數。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-08-08
  • C++使struct對象擁有可變大小的數組(詳解)

    C++使struct對象擁有可變大小的數組(詳解)

    下面小編就為大家?guī)硪黄狢++使struct對象擁有可變大小的數組(詳解)。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-12-12
  • 解讀C++編程中類模板的三種特化

    解讀C++編程中類模板的三種特化

    這篇文章主要介紹了C++編程中類模板的三種特化,需要的朋友可以參考下
    2016-01-01
  • c++中ref的作用示例解析

    c++中ref的作用示例解析

    這篇文章主要為大家介紹了c++中ref的作用示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04

最新評論