C函式之memcpy 函式用法
阿新 • • 發佈:2018-11-11
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!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,使用時一般要進行強制型別轉換。
程式碼示例:
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #define N (10)
- int main()
- {
- char* p1 = "abcde";
- char* p2 = (
- char* p3 = (char*)memcpy(p2, p1, N);
- printf("p2 = %s\np3 = %s\n", p2, p3);
- free(p2);
- p2 = NULL;
- p3 = NULL;
- system("pause");
- return 0;
- }
p2 = abcde
p3 = abcde
程式碼說明:
1) 程式碼首先定義p1,p2,p3三個指標,但略有不同,p1指向一個字串字面值,給p2分配了10個位元組的記憶體空間。
2) 指標p3通過函式memcpy直接指向了指標p2所指向的記憶體,也就是說指標p2、p3指向了同一塊記憶體。然後列印p2,p3指向的記憶體值,結果是相同的。
3) 最後按照好的習慣釋放p2,並把p3也置為NULL是為了防止再次訪問p3指向的記憶體,導致野指標的發生。