我的試驗結果是2個函式的執行效果沒有區別. vc6sp6 + winxp.
同學查了資料說是和庫實現有關, 那麼以後一律用memmove, 不用memcpy了.
//#include "stdafx.h"
#include #include void fntest1();
void fntest2();
int main(int argc, char* argv)
void fntest1()
; char szbuf2[8] = ;
/// 當src首位址 > dst首位址時, memmove和memcpy效果是相同的, 且都正確
memmove(&szbuf[2], &szbuf[4], 4);
/**- szbuf 0x0109ff78 "01456767? .y.g"
[0x0] 0x30 '0'
[0x1] 0x31 '1'
[0x2] 0x34 '4'
[0x3] 0x35 '5'
[0x4] 0x36 '6'
[0x5] 0x37 '7'
[0x6] 0x36 '6'
[0x7] 0x37 '7'
*/memcpy(&szbuf2[2], &szbuf2[4], 4);
/**- szbuf2 0x0109ff70 "0145676701456767? .y.g"
[0x0] 0x30 '0'
[0x1] 0x31 '1'
[0x2] 0x34 '4'
[0x3] 0x35 '5'
[0x4] 0x36 '6'
[0x5] 0x37 '7'
[0x6] 0x36 '6'
[0x7] 0x37 '7'
*/}void fntest2()
; char szbuf2[8] = ;
/// 當src首位址 < dst首位址時, memmove和memcpy效果是相同的, 且都正確
memmove(&szbuf[4], &szbuf[2], 4);
/**- szbuf 0x0109ff24 "01232345€ .r.g"
[0x0] 0x30 '0'
[0x1] 0x31 '1'
[0x2] 0x32 '2'
[0x3] 0x33 '3'
[0x4] 0x32 '2'
[0x5] 0x33 '3'
[0x6] 0x34 '4'
[0x7] 0x35 '5'
*/memcpy(&szbuf2[4], &szbuf2[2], 4);
/**- szbuf2 0x0109ff1c "0123234501232345€ .r.g"
[0x0] 0x30 '0'
[0x1] 0x31 '1'
[0x2] 0x32 '2'
[0x3] 0x33 '3'
[0x4] 0x32 '2'
[0x5] 0x33 '3'
[0x6] 0x34 '4'
[0x7] 0x35 '5'*/}
memcpy與memmove 的區別
memcpy與memmove的目的都是將n個位元組的源記憶體位址的內容拷貝到目標記憶體位址中。但當源記憶體和目標記憶體存在重疊時,memcpy會出現錯誤,而memmove能正確地實施拷貝,但這也增加了一點點開銷。memmove的處理措施 1 當源記憶體的首位址等於目標記憶體的首位址時,不進行任何拷貝...
memcpy與memmove的區別
memcpy和memmove 都是c語言中的庫函式,在標頭檔案string.h中,作用是拷貝一定長度的記憶體的內容,原型分別如下 void memcpy void dst,const void src,size t count void memmove void dst,const void src...
memcpy 函式與memmove 函式
void memcpy void dest,const void src,size t n 函式說明 1 src 和 dest 所指的記憶體區域可能重疊,但是如果src 和 dest 所指的記憶體區域重疊,memcpy 函式並不能確保src所在重疊區域在被拷貝之前不被覆蓋,這種情況可以使用memmo...