當我們不考慮一塊記憶體的具體內容與型別,而需要進行拷貝時,我們經常會用到memcpy或者memmove,
memcpy和memmove()都是c語言中的庫函式,在標頭檔案string.h中,作用是拷貝一定長度的記憶體的內容,原型分別如下:
void *memcpy(void *dst, const void *src, size_t count);
void *memmove(void *dst, const void *src, size_t count);
他們的作用是一樣的,唯一的區別是,當記憶體發生區域性重疊的時候,memmove保證拷貝的結果是正確的,memcpy不保證拷貝的結果的正確。
但是在vc++或者vs的編譯器上,memcpy也處理了這個問題
,在gcc上沒有處理這個問題。
/*
filename: memcpy.c
author: caocun
*/#include#include#include//在vc++編譯環境下,對於.c檔案,則宣告變數需要在最前面。
//記憶體拷貝的可能情況:
/*(1)記憶體低端 <-----s-----> <-----d-----> 記憶體高階 start at end of s
(2)記憶體低端 <-----s--<==>--d-----> 記憶體高階 start at end of s
(3)記憶體低端 <-----sd-----> 記憶體高階 do nothing
(4)記憶體低端 <-----d--<==>--s-----> 記憶體高階 start at beginning of s
(5)記憶體低端 <-----d-----> <-----s-----> 記憶體高階 start at beginning of s
*/void* mymemcpy(void* dest, void* source, size_t count)
return ret;
}void *mymemmove(void *dest,const void *source,size_t count)
} else }
return ret;
}int main()
; char *ptr = null;
/ ptr = (char*)memcpy(dest+5, dest, 15);
printf("ptr = %s\n", ptr);
printf("dest = %s\n", dest);
// return 0;
}
memmove 和 memcpy的區別
memcpy和memmove 都是c語言中的庫函式,在標頭檔案string.h中,作用是拷貝一定長度的記憶體的內容,原型分別如下 void memcpy void dst,const void src,size t count void memmove void dst,const void src...
memcpy和memmove的區別
memcpy和memmove的區別 memcpy 和memmove 都是c語言中的庫函式,在標頭檔案string.h中,其原型分別如下 void memcpy void dst,const void src,size t count void memmove void dst,const void ...
memcpy和memmove的區別
memcpy和memmove的區別 memcpy 和memmove 都是c語言中的庫函式,在標頭檔案string.h中,其原型分別如下 void memcpy void dst,const void src,size t count void memmove void dst,const void ...