下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
memmove、memcpy和mem**y三個(gè)函數(shù)都是內(nèi)存的拷貝,從一個(gè)緩沖區(qū)拷貝到另一個(gè)緩沖區(qū)。memmove(void*dest,void*src,intcount)memcpy(void*dest,void*src,intcount)mem**y(void*dest,void*src,intch,intcount)表頭文件:#include<string.h>定義函數(shù):void*memcpy(void*dest,constvoid*src,size_tn)函數(shù)說(shuō)明:memcpy()用來(lái)拷貝src所指的內(nèi)存內(nèi)容前n個(gè)字節(jié)到dest所指的內(nèi)存地址上。與strcpy()不同的是,memcpy()會(huì)完整的復(fù)制n個(gè)字節(jié),不會(huì)因?yàn)橛龅阶址Y(jié)束'/0'而結(jié)束返回值:返回指向dest的指針表頭文件:#include<string.h>定義函數(shù):void*mem**y(void*dest,constvoid*src,intc,size_tn);函數(shù)說(shuō)明:mem**y()用來(lái)拷貝src所指的內(nèi)存內(nèi)容前n個(gè)字節(jié)到dest所指的地址上。與memcpy()不同的是,mem**y()如果在src中遇到某個(gè)特定值(intc)立即停止復(fù)制。返回值:返回指向dest中值為c的下一個(gè)字節(jié)指針。返回值為0表示在src所指內(nèi)存前n個(gè)字節(jié)中沒(méi)有值為c的字節(jié)。表頭文件:#include<string.h>定義函數(shù):void*memmove(void*dest,constvoid*src,size_tn);函數(shù)說(shuō)明:memmove()是從一個(gè)緩沖區(qū)移動(dòng)到另一個(gè)緩沖區(qū)中。返回值:返回指向dest指針。當(dāng)dest<=src-count或dest>=src+count時(shí),以上三個(gè)函數(shù)均不會(huì)產(chǎn)生覆蓋問(wèn)題,即源數(shù)據(jù)不會(huì)被更改。若不在以上范圍內(nèi),則源數(shù)據(jù)會(huì)被更改。如:chara[]={'a','b'};charb[]={'c','d','e','f','g','h'};memmove(a,b,sizeof(b));或是直接char*p=b+2;memmove(p,b,sizeof(b));輸出數(shù)據(jù)會(huì)發(fā)現(xiàn)b中數(shù)據(jù)輸出已被更改。發(fā)現(xiàn)即使a數(shù)組指向的空間不夠存儲(chǔ)數(shù)據(jù),也能夠移動(dòng)成功。原因|dest-src|<count如果在使用這些函數(shù)時(shí),分配給足夠的空間,然后再使用就不會(huì)出現(xiàn)覆蓋問(wèn)題。也就是說(shuō)如果外部分配給的空間不足以存儲(chǔ)要拷貝的數(shù)據(jù)時(shí),就有可能出現(xiàn)源數(shù)據(jù)被覆蓋更改的問(wèn)題。#include<stdio.h>#include<stdlib.h>#include<string.h>voidmain(void){inti=0;chara[9]={'a','b','c','d','e','f','g','h','/0'};charp[2]={'q','w'};//或char*p=a+2;memmove(p,a,sizeof(a));puts(a);printf("_____________________________________________/n");puts(p);printf("_____________________________________________/n");for(i=0;i<10;i++)printf("%c%d/n",*(a+i),a+i);printf("_____________________________________________/n");for(i=0;i<8;i++)printf("%c%d/n",*(p+i),p+i);}觀察輸出結(jié)果。把memmove(p,a,sizeof(a));改為memcpy(p,a,sizeof(a));或mem**y(p,a,'e',sizeof(a));再觀察輸出結(jié)果。可以看出在目的存儲(chǔ)空間不足時(shí),便會(huì)出現(xiàn)源數(shù)據(jù)被覆蓋改變的問(wèn)題。如果目的存儲(chǔ)空間分配足夠的空間,則便不會(huì)出現(xiàn)覆蓋問(wèn)題。memcpy()、memmove()、memset()的實(shí)現(xiàn)void*memcpy(void*pvTo,constvoid*pvFrom,size_tsize)與strcpy相比,memcpy并不是遇到'/0'就結(jié)束,而是一定會(huì)拷貝完n個(gè)字節(jié)。viewplaincopytoclipboardprint?void*memcpy(void*pvTo,constvoid*pvFrom,size_tsize){assert((pvTo!=NULL)&&(pvFrom!=NULL));//使用斷言byte*pbTo=(byte*)pvTo;//防止改變pvTo的地址byte*pbFrom=(byte*)pvFrom;//防止改變pvFrom的地址while(size-->0)pbTo++=*pbFrom++;returnpvTo;}void*memcpy(void*pvTo,constvoid*pvFrom,size_tsize){assert((pvTo!=NULL)&&(pvFrom!=NULL));//使用斷言byte*pbTo=(byte*)pvTo;//防止改變pvTo的地址byte*pbFrom=(byte*)pvFrom;//防止改變pvFrom的地址while(size-->0)pbTo++=*pbFrom++;returnpvTo;}memmove()功能將指針src指向的前n個(gè)字節(jié)拷貝到dest指向的前n個(gè)內(nèi)存區(qū)域中可能出現(xiàn)dest和scr內(nèi)存重疊的情況,都進(jìn)行了很好的處理,這也是和mencpy()的區(qū)別之處viewplaincopytoclipboardprint?vord*memmove(void*dest,constvoid*src,size_tcount){void*ret=dest;if(dest<=src||dest>=src+count){while(count--)dest++=*src++}else{dest+=count-1;src+=count-1;while(count--)dest--=*src--}returnret;}vord*memmove(void*dest,constvoid*src,size_tcount){void*ret=dest;if(dest<=src||dest>=src+count){while(count--)dest++=*src++}else{dest+=count-1;src+=count-1;while(count--)dest--=*src--}returnret;}void*memset(void*s,intc,intn)用c填充由指針s指向的內(nèi)存區(qū)域的前n個(gè)字節(jié).返回指向該內(nèi)存區(qū)域的指針s.s并不一定是指向字符的指針,以是指向任何類型的指針,甚至可以是指向結(jié)構(gòu)的指針.viewplaincopy
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度煤矸石環(huán)保處理工程采購(gòu)合同4篇
- 2025年成都沙盤模型廠家大型展會(huì)專用合同4篇
- 二零二五版男方家庭暴力離婚協(xié)議及財(cái)產(chǎn)分配執(zhí)行監(jiān)督合同3篇
- 2025年度個(gè)人反擔(dān)保債務(wù)重組執(zhí)行合同
- 二零二五年度債務(wù)重組與財(cái)產(chǎn)保全法律咨詢合同3篇
- 2025年度個(gè)人知識(shí)產(chǎn)權(quán)反擔(dān)保承諾書示例2篇
- 2025版美容院美容課程設(shè)計(jì)與教學(xué)合同4篇
- 醫(yī)療資源分配倫理-第3篇-深度研究
- 二零二五版新能源電池租賃合作協(xié)議3篇
- 二零二五年度模特個(gè)人品牌合作開發(fā)合同4篇
- 室上性心動(dòng)過(guò)速-醫(yī)學(xué)課件
- 建設(shè)工程法規(guī)及相關(guān)知識(shí)試題附答案
- 中小學(xué)心理健康教育課程標(biāo)準(zhǔn)
- 四年級(jí)上冊(cè)脫式計(jì)算400題及答案
- 新課標(biāo)人教版小學(xué)數(shù)學(xué)六年級(jí)下冊(cè)集體備課教學(xué)案全冊(cè)表格式
- 人教精通版三年級(jí)英語(yǔ)上冊(cè)各單元知識(shí)點(diǎn)匯總
- 人口分布 高一地理下學(xué)期人教版 必修第二冊(cè)
- 教案:第三章 公共管理職能(《公共管理學(xué)》課程)
- 諾和關(guān)懷俱樂(lè)部對(duì)外介紹
- 玩轉(zhuǎn)數(shù)和形課件
- 保定市縣級(jí)地圖PPT可編輯矢量行政區(qū)劃(河北省)
評(píng)論
0/150
提交評(píng)論