程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 比較C說話中memccpy()函數和memcpy()函數的用法

比較C說話中memccpy()函數和memcpy()函數的用法

編輯:關於C++

比較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指向的內存,招致野指針的產生。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved