激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - C/C++ - 對比C語言中memccpy()函數和memcpy()函數的用法

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

2021-03-08 13:40C語言教程網 C/C++

這篇文章主要介紹了對比C語言中memccpy()函數和memcpy()函數的用法,二者都是用于復制內存內容,注意區別,需要的朋友可以參考下

C語言memccpy()函數:復制內存中的內容
頭文件:

?
1
#include <string.h>

定義函數:

?
1
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的字節。

范例

?
1
2
3
4
5
6
7
#include <string.h>
main(){
  char a[] = "string[a]";
  char b[] = "string(b)";
  memccpy(a, b, 'B', sizeof(b));
  printf("memccpy():%s\n", a);
}

執行結果:

?
1
memccpy():string(b)

C語言memcpy()函數:復制內存內容(忽略\0)
頭文件:

?
1
#include <string.h>

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

?
1
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,使用時一般要進行強制類型轉換。


代碼示例:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#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;
}

運行結果:

?
1
2
p2 = abcde
p3 = abcde

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

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

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

延伸 · 閱讀

精彩推薦
  • C/C++深入理解goto語句的替代實現方式分析

    深入理解goto語句的替代實現方式分析

    本篇文章是對goto語句的替代實現方式進行了詳細的分析介紹,需要的朋友參考下...

    C語言教程網7342020-12-03
  • C/C++C語言實現電腦關機程序

    C語言實現電腦關機程序

    這篇文章主要為大家詳細介紹了C語言實現電腦關機程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    xiaocaidayong8482021-08-20
  • C/C++C/C++經典實例之模擬計算器示例代碼

    C/C++經典實例之模擬計算器示例代碼

    最近在看到的一個需求,本以為比較簡單,但花了不少時間,所以下面這篇文章主要給大家介紹了關于C/C++經典實例之模擬計算器的相關資料,文中通過示...

    jia150610152021-06-07
  • C/C++C語言中炫酷的文件操作實例詳解

    C語言中炫酷的文件操作實例詳解

    內存中的數據都是暫時的,當程序結束時,它們都將丟失,為了永久性的保存大量的數據,C語言提供了對文件的操作,這篇文章主要給大家介紹了關于C語言中文件...

    針眼_6702022-01-24
  • C/C++學習C++編程的必備軟件

    學習C++編程的必備軟件

    本文給大家分享的是作者在學習使用C++進行編程的時候所用到的一些常用的軟件,這里推薦給大家...

    謝恩銘10102021-05-08
  • C/C++c++ 單線程實現同時監聽多個端口

    c++ 單線程實現同時監聽多個端口

    這篇文章主要介紹了c++ 單線程實現同時監聽多個端口的方法,幫助大家更好的理解和學習使用c++,感興趣的朋友可以了解下...

    源之緣11542021-10-27
  • C/C++詳解c語言中的 strcpy和strncpy字符串函數使用

    詳解c語言中的 strcpy和strncpy字符串函數使用

    strcpy 和strcnpy函數是字符串復制函數。接下來通過本文給大家介紹c語言中的strcpy和strncpy字符串函數使用,感興趣的朋友跟隨小編要求看看吧...

    spring-go5642021-07-02
  • C/C++C++之重載 重定義與重寫用法詳解

    C++之重載 重定義與重寫用法詳解

    這篇文章主要介紹了C++之重載 重定義與重寫用法詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下...

    青山的青6062022-01-04
主站蜘蛛池模板: 91久久国产露脸精品国产护士 | 国产精品1区,2区,3区 | 欧美在线观看禁18 | 久章草在线视频 | 福利在线小视频 | 欧美人与性禽动交精品 | 国产一区二区影视 | 青青草国产在线视频 | 久久九九热re6这里有精品 | 欧美国产一区二区三区 | 国产成人强伦免费视频网站 | 日韩欧美高清一区 | 久草成人在线观看 | 欧美成人理论片乱 | 看免费的毛片 | 免费人成在线播放 | 草草在线视频 | 久久狠狠高潮亚洲精品 | 国产精品久久久久久久四虎电影 | 泰剧19禁啪啪无遮挡大尺度 | 国内精品免费一区二区2001 | 国产精品wwww | 日韩区在线 | 欧美亚洲一区二区三区四区 | 一区在线视频观看 | 欧美一级视频在线观看 | 日日鲁夜夜视频热线播放 | 欧美精品一区二区三区四区 | 一级欧美日韩 | 欧美中文字幕一区二区三区亚洲 | 91网页| h视频免费观看 | 久久男人| 成人午夜在线播放 | 亚欧美一区二区 | 成人激情视频网 | 日韩视频精品一区 | 黄污免费网站 | 欧美一级高清片 | 成人做爰高潮片免费视频韩国 | 国产二区三区视频 |