欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2015年08月26日 11:01:45   投稿:goldensun  
這篇文章主要介紹了對比C語言中memccpy()函數(shù)和memcpy()函數(shù)的用法,二者都是用于復(fù)制內(nèi)存內(nèi)容,注意區(qū)別,需要的朋友可以參考下

C語言memccpy()函數(shù):復(fù)制內(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()會在復(fù)制時檢查參數(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í)行結(jié)果:

memccpy():string(b)

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

#include <string.h>

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

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

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

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

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

與 strcpy() 不同的是,memcpy() 會完整的復(fù)制 num 個字節(jié),不會因為遇到“\0”而結(jié)束。

【返回值】返回指向 dest 的指針。注意返回的指針類型是 void,使用時一般要進行強制類型轉(zhuǎn)換。


代碼示例:

#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;
}

運行結(jié)果:

p2 = abcde
p3 = 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)存值,結(jié)果是相同的。

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

相關(guān)文章

  • C語言sizeof與字符串處理與動態(tài)內(nèi)存分配及main函數(shù)參數(shù)詳解

    C語言sizeof與字符串處理與動態(tài)內(nèi)存分配及main函數(shù)參數(shù)詳解

    這篇文章主要介紹了C語言字符串處理函數(shù)、sizeof、動態(tài)內(nèi)存分配函數(shù)、main函數(shù)參數(shù)問題,static在修飾變量的時候,如果是修飾全局變量,則跟全局變量功能一樣,通過示例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2022-07-07
  • Qt控件之QToolButton的使用及示例

    Qt控件之QToolButton的使用及示例

    QToolButton類提供了一個快速訪問命令或選項的按鈕,通常在QToolBar內(nèi)部使用,本文主要介紹了Qt控件之QToolButton的使用及示例,感興趣的可以了解一下
    2023-10-10
  • C語言如何與ARM匯編語言混合編程示例詳解

    C語言如何與ARM匯編語言混合編程示例詳解

    本文主要敘述了C與匯編語言混合編程,匯編語言指的是ARM匯編語言。本文用來幫助理解ARM嵌入式中的匯編程序,及C語言如何與匯編混合編程
    2021-10-10
  • C++實現(xiàn)FTP綜合應(yīng)用詳解

    C++實現(xiàn)FTP綜合應(yīng)用詳解

    這篇文章主要為大家詳細介紹了C++實現(xiàn)FTP綜合應(yīng)用,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • C++實現(xiàn)編碼轉(zhuǎn)換的示例代碼

    C++實現(xiàn)編碼轉(zhuǎn)換的示例代碼

    這篇文章主要介紹了C++實現(xiàn)編碼轉(zhuǎn)換的示例代碼,幫助大家快捷的實現(xiàn)編碼轉(zhuǎn)換,感興趣的朋友可以了解下
    2020-08-08
  • C++實現(xiàn)單例模式日志輸出詳解

    C++實現(xiàn)單例模式日志輸出詳解

    這篇文章主要為大家詳細介紹了C++中單例模式的相關(guān)知識,并給出單例模式日志實現(xiàn),文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2023-04-04
  • C++指針與引用的異同

    C++指針與引用的異同

    這篇文章主要介紹了C++指針與引用的異同,文章以C++指針與引用的相關(guān)資料結(jié)合指針和引用的相同點和區(qū)別展開詳細內(nèi)容,需要的朋友可以參考一下
    2021-11-11
  • C++中抽象類和接口的區(qū)別介紹

    C++中抽象類和接口的區(qū)別介紹

    抽象類(abstract class)和接口(interface)的概念是面向?qū)ο笤O(shè)計中常用的概念, 也是比較容易混淆的概念. 在這里, 我提出一種區(qū)分它們的思路
    2013-04-04
  • 使用設(shè)計模式中的單例模式來實現(xiàn)C++的boost庫

    使用設(shè)計模式中的單例模式來實現(xiàn)C++的boost庫

    這篇文章主要介紹了使用設(shè)計模式中的單例模式來實現(xiàn)C++的boost庫的方法,其中作者對線程安全格外強調(diào),需要的朋友可以參考下
    2016-03-03
  • C語言中數(shù)據(jù)在內(nèi)存如何存儲

    C語言中數(shù)據(jù)在內(nèi)存如何存儲

    本文詳細講解了C語言中數(shù)據(jù)在內(nèi)存如何存儲,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12

最新評論