国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C > 正文

對比C語言中memccpy()函數(shù)和memcpy()函數(shù)的用法

2020-01-26 14:57:18
字體:
來源:轉載
供稿:網(wǎng)友

C語言memccpy()函數(shù):復制內(nèi)存中的內(nèi)容
頭文件:

#include <string.h>

定義函數(shù):

void * memccpy(void *dest, const void * src, int c, size_t n);

函數(shù)說明:memccpy()用來拷貝src 所指的內(nèi)存內(nèi)容前n 個字節(jié)到dest 所指的地址上。與memcpy()不同的是,memccpy()會在復制時檢查參數(shù)c 是否出現(xiàn),若是則返回dest 中值為c 的下一個字節(jié)地址。

返回值:返回指向dest 中值為c 的下一個字節(jié)指針。返回值為0 表示在src 所指內(nèi)存前n 個字節(jié)中沒有值為c的字節(jié)。

范例

#include <string.h>main(){  char a[] = "string[a]";  char b[] = "string(b)";  memccpy(a, b, 'B', sizeof(b));  printf("memccpy():%s/n", a);}

執(zhí)行結果:

memccpy():string(b)

C語言memcpy()函數(shù):復制內(nèi)存內(nèi)容(忽略/0)
頭文件:

#include <string.h>

memcpy() 用來復制內(nèi)存,其原型為:

  void * memcpy ( void * dest, const void * src, size_t num );

memcpy() 會復制 src 所指的內(nèi)存內(nèi)容的前 num 個字節(jié)到 dest 所指的內(nèi)存地址上。

memcpy() 并不關心被復制的數(shù)據(jù)類型,只是逐字節(jié)地進行復制,這給函數(shù)的使用帶來了很大的靈活性,可以面向任何數(shù)據(jù)類型進行復制。

需要注意的是:
dest 指針要分配足夠的空間,也即大于等于 num 字節(jié)的空間。如果沒有分配空間,會出現(xiàn)斷錯誤。
dest 和 src 所指的內(nèi)存空間不能重疊(如果發(fā)生了重疊,使用 memmove() 會更加安全)。

與 strcpy() 不同的是,memcpy() 會完整的復制 num 個字節(jié),不會因為遇到“/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 = abcdep3 = abcde

代碼說明:
1) 代碼首先定義p1,p2,p3三個指針,但略有不同,p1指向一個字符串字面值,給p2分配了10個字節(jié)的內(nèi)存空間。

2) 指針p3通過函數(shù)memcpy直接指向了指針p2所指向的內(nèi)存,也就是說指針p2、p3指向了同一塊內(nèi)存。然后打印p2,p3指向的內(nèi)存值,結果是相同的。

3) 最后按照好的習慣釋放p2,并把p3也置為NULL是為了防止再次訪問p3指向的內(nèi)存,導致野指針的發(fā)生。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 县级市| 文安县| 阿克苏市| 阿尔山市| 永康市| 手游| 舒兰市| 偃师市| 崇左市| 抚顺市| 潍坊市| 鄂托克旗| 博罗县| 平阴县| 青田县| 邹平县| 鹤壁市| 通化县| 凤冈县| 饶河县| 文昌市| 陆良县| 高雄市| 星子县| 海南省| 博爱县| 织金县| 永善县| 乡城县| 绵阳市| 叙永县| 巴林右旗| 四子王旗| 侯马市| 通辽市| 名山县| 乌兰察布市| 三门峡市| 格尔木市| 固镇县| 固镇县|