1. 程式人生 > >C函式之memcpy 函式用法

C函式之memcpy 函式用法

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

                標頭檔案:#include <string.h>

memcpy() 用來複制記憶體,其原型為:
    void * memcpy ( void * dest, const void * src, size_t num );


memcpy() 會複製 src 所指的記憶體內容的前 num 個位元組到 dest 所指的記憶體地址上。

memcpy() 並不關心被複制的資料型別,只是逐位元組地進行復制,這給函式的使用帶來了很大的靈活性,可以面向任何資料型別進行復制。

需要注意的是:
  • dest 指標要分配足夠的空間,也即大於等於 num 位元組的空間。如果沒有分配空間,會出現斷錯誤。
  • dest 和 src 所指的記憶體空間不能重疊(如果發生了重疊,使用 memmove() 會更加安全)。

與 strcpy() 不同的是,memcpy() 會完整的複製 num 個位元組,不會因為遇到“\0”而結束。


【返回值】返回指向 dest 的指標。注意返回的指標型別是 void,使用時一般要進行強制型別轉換。


程式碼示例:

    
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #define N (10)
  5. int main()
  6. {
  7.     char* p1 = "abcde";
  8.     char* p2 = (
    char*)malloc(sizeof(char) * N);
  9.     char* p3 = (char*)memcpy(p2, p1, N);
  10.     printf("p2 = %s\np3 = %s\n", p2, p3);
  11.     free(p2);
  12.     p2 = NULL;
  13.     p3 = NULL;
  14.     system("pause");
  15.     return 0;
  16. }
執行結果:
p2 = abcde
p3 = abcde

程式碼說明:
1) 程式碼首先定義p1,p2,p3三個指標,但略有不同,p1指向一個字串字面值,給p2分配了10個位元組的記憶體空間。

2) 指標p3通過函式memcpy直接指向了指標p2所指向的記憶體,也就是說指標p2、p3指向了同一塊記憶體。然後列印p2,p3指向的記憶體值,結果是相同的。

3) 最後按照好的習慣釋放p2,並把p3也置為NULL是為了防止再次訪問p3指向的記憶體,導致野指標的發生。
           

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述