欧美大屁股bbbbxxxx,狼人大香伊蕉国产www亚洲,男ji大巴进入女人的视频小说,男人把ji大巴放进女人免费视频,免费情侣作爱视频

歡迎來到入門教程網(wǎng)!

C語言

當(dāng)前位置:主頁 > 軟件編程 > C語言 >

關(guān)于memcpy和memmove的一點(diǎn)重要說明

來源:本站原創(chuàng)|時(shí)間:2020-01-10|欄目:C語言|點(diǎn)擊: 次

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

實(shí)現(xiàn)同樣的功能,沒有接觸到其不同。

memcpy和memmove在MSDN的定義如下:

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

當(dāng)我們需要將char* src="abcde"這個(gè)字符串全部copy到dest中然而src與dest在內(nèi)存中大概是這樣存在的:

內(nèi)存地址   低------>高

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

src地址為內(nèi)存1,目的地址為內(nèi)存2此時(shí)很明顯內(nèi)存出現(xiàn)了重疊,當(dāng)我們拷貝字符a到第三個(gè)內(nèi)存位置的時(shí)

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

解決方法,試想當(dāng)我們先將dest地址移動(dòng)dest+n-1同時(shí)src地址移動(dòng)src+n-1這樣再從src的最后一個(gè)元素開

始逐個(gè)向前拷貝到dest中就完美的避免了內(nèi)存重疊導(dǎo)致的元素覆蓋問題呢

下面我們根據(jù)memcpy和memmove給出自己的實(shí)現(xiàn):

#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;
}

運(yùn)行截圖:

以上就是小編為大家?guī)淼年P(guān)于memcpy和memmove的一點(diǎn)重要說明全部內(nèi)容了,希望大家多多支持我們~

上一篇:詳談C++中虛基類在派生類中的內(nèi)存布局

欄    目:C語言

下一篇:C++使struct對象擁有可變大小的數(shù)組(詳解)

本文標(biāo)題:關(guān)于memcpy和memmove的一點(diǎn)重要說明

本文地址:http://mengdiqiu.com.cn/a1/Cyuyan/1910.html

網(wǎng)頁制作CMS教程網(wǎng)絡(luò)編程軟件編程腳本語言數(shù)據(jù)庫服務(wù)器

如果侵犯了您的權(quán)利,請與我們聯(lián)系,我們將在24小時(shí)內(nèi)進(jìn)行處理、任何非本站因素導(dǎo)致的法律后果,本站均不負(fù)任何責(zé)任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權(quán)所有