回覆列表
  • 1 # 使用者1465424935672

    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不保證複製的結果的正確。

    二者的c語言實現很簡單,有興趣的朋友可以去看看。在實際情況下,這兩個函式都是用匯編實現的。

    memmove在copy兩個有重疊區域的記憶體時可以保證copy的正確,而memcopy就不行了,但memcopy比memmove的速度要快一些,如:

    char s[] = "1234567890";

    char* p1 = s;

    char* p2 = s+2;

    memcpy(p2, p1, 5)與memmove(p2, p1, 5)的結果就可能是不同的,memmove()可以將p1的頭5個字元"12345"正確複製至p2,而memcpy()的結果就不一定正確了.

    和memcpy相比,src和des有重疊的情況下,memmove可以保證資料的完整性.

  • 中秋節和大豐收的關聯?
  • 因鐵路而興起的城市有哪幾個?