比較C說話中memccpy()函數和memcpy()函數的用法。本站提示廣大學習愛好者:(比較C說話中memccpy()函數和memcpy()函數的用法)文章只能為提供參考,不一定能成為您想要的結果。以下是比較C說話中memccpy()函數和memcpy()函數的用法正文
C說話memccpy()函數:復制內存中的內容
頭文件:
#include <string.h>
界說函數:
void * memccpy(void *dest, const void * src, int c, size_t n);
函數解釋:memccpy()用來拷貝src 所指的內存內容前n 個字節到dest 所指的地址上。與memcpy()分歧的是,memccpy()會在復制時檢討參數c 能否湧現,若是則前往dest 中值為c 的下一個字節地址。
前往值:前往指向dest 中值為c 的下一個字節指針。前往值為0 表現在src 所指內存前n 個字節中沒有值為c的字節。
典范
#include <string.h> main(){ char a[] = "string[a]"; char b[] = "string(b)"; memccpy(a, b, 'B', sizeof(b)); printf("memccpy():%s\n", a); }
履行成果:
memccpy():string(b)
C說話memcpy()函數:復制內存內容(疏忽\0)
頭文件:
#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*)malloc(sizeof(char) * N); 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指向的內存,招致野指針的產生。