最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C/C++?string.h庫中memcpy()和memmove()的使用

 更新時間:2023年12月21日 11:02:43   作者:????????WendyWJGu  
memcpy與memmove的目的都是將N個字節(jié)的源內(nèi)存地址的內(nèi)容拷貝到目標內(nèi)存地址中,本文主要介紹了C/C++?string.h庫中memcpy()和memmove()的使用,感興趣的可以了解一下

不能把一個數(shù)組賦給另一個數(shù)組,所以要通過循環(huán)把數(shù)組中的每個元素賦給另一個數(shù)組相應(yīng)的元素。有一個例外的情況是:使用strcpy()和strncpy()函數(shù)來處理字符數(shù)組。

memcpy()和memmove()函數(shù)提供類似的方法處理任意類型的數(shù)組,下面是這兩個寒素的原型:

void *memcpy(void *restrict s1, const void *restrict s2, size_t n);
void *memmove(void *s1, const void *s2, size_t n);

這兩個函數(shù)都從s2指向的位置拷貝n字節(jié)到s1指向的位置,而且都返回s1的值。所不同的是memcpy()的參數(shù)帶關(guān)鍵字restrict,即memcpy()假設(shè)兩個內(nèi)存區(qū)域之間沒有重疊。

而memmove()不做這樣的假設(shè),所以拷貝過程類似于先把所有字節(jié)拷貝到一個臨時緩沖區(qū),然后再拷貝到最終目的地。

如果使用memcpy()時,兩區(qū)域出現(xiàn)重疊會怎樣?其行為時未定義的。這意味著該函可能正常工作。也可能失敗。編譯器不會再本該不使用memcpy()時禁止你使用,作為程序員,再使用該函數(shù)時有責任確保兩個區(qū)域不重疊。

由于這兩個函數(shù)設(shè)計用于處理任何數(shù)據(jù)類型,所有它們的參數(shù)都是兩個指向void的針。

C允許把任何類型的指針賦給void*類型的指針。如此寬容導(dǎo)致函數(shù)無法知道待拷貝據(jù)的類型。因此這兩個函數(shù)使用第3個參數(shù)指明待拷貝的字節(jié)數(shù)。

需要注意的時,對數(shù)組而言,字節(jié)數(shù)與元素的個數(shù)不同。如果要拷貝數(shù)組中10個double

類型的元素,要使用10*sizeof(double),而不是10.

示例源碼:

// Len_memcpy.cpp : 此文件包含 "main" 函數(shù)。程序執(zhí)行將在此處開始并結(jié)束。
//

#include <iostream>
#define SIZE 10
#include <string>
using namespace std;

void PrintD(string s, int* data, int len)
{	
	printf("%s\t", s.c_str());
	for (int i = 0; i < len; i++)
	{
		printf("%d\t", data[i]);
	}
	printf("\n");
}
void PrintD(string s, double* data, int len)
{
	printf("%s\t", s.c_str());
	for (int i = 0; i < len; i++)
	{
		printf("%.2lf\t", data[i]);
	}
	printf("\n");
}
int main()
{
	int nValues[SIZE] = { 1,2,3,4,5,6,7,8,9,10 };
	double dValues[SIZE] = { 1.1, 2.2, 3.3, 4.4, 5.5,6.6,7.7,8.8,9.9, 0.1 };
	
	int memcpyN[SIZE] = {0};          // 使用memcpy拷貝數(shù)據(jù)到這里
	double memcpyD[SIZE] = {0.0};
	
	int memmoveN[SIZE] = { 0 };		 // 使用memmove拷貝數(shù)據(jù)到這里
	double memmoveD[SIZE] = { 0.0 };

	printf(" copy before: \n");
	PrintD("Values  ", nValues, SIZE);
	PrintD("dValues ", dValues, SIZE);
	PrintD("targetN ", memcpyN, SIZE);
	PrintD("targetD ", memcpyD, SIZE);

	printf("\n after memcpy copy: \n");
	memcpy(memcpyN, nValues, sizeof(int)*SIZE);
	memcpy(memcpyD, dValues, sizeof(int)*SIZE); // double比size占位寬,這里會丟失數(shù)據(jù)
	PrintD("Values  ", nValues, SIZE);
	PrintD("dValues ", dValues, SIZE);
	PrintD("memcpyN ", memcpyN, SIZE);
	PrintD("memcpyD ", memcpyD, SIZE);

	printf("\n after memmove copy: \n");
	memcpy(memmoveN, nValues, sizeof(int)*SIZE);
	memcpy(memmoveD, dValues, sizeof(double)*SIZE); // 這里不會再丟失數(shù)據(jù)
	PrintD("Values  ", nValues, SIZE);
	PrintD("dValues ", dValues, SIZE);
	PrintD("memmoveN", memmoveN, SIZE);
	PrintD("memmoveD", memmoveD, SIZE);
}

執(zhí)行結(jié)果:

到此這篇關(guān)于C/C++ string.h庫中memcpy()和memmove()的使用的文章就介紹到這了,更多相關(guān)C++ memcpy()和memmove()內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用C++制作簡單的web服務(wù)器

    使用C++制作簡單的web服務(wù)器

    本文給大家分享的是使用C++簡單實現(xiàn)web服務(wù)器的代碼,雖然非常的簡陋,功能也很少,主要是為了更好的理解WEB服務(wù)器的工作原理,推薦給大家,也希望對大家能夠有所幫助。
    2015-03-03
  • Cocos2d-x觸摸事件實例

    Cocos2d-x觸摸事件實例

    這篇文章主要介紹了Cocos2d-x觸摸事件實例,本文代碼中包含大量注釋來說明Cocos2d-x中的觸摸事件使用示例,需要的朋友可以參考下
    2014-09-09
  • C++基于對話框的程序的框架實例

    C++基于對話框的程序的框架實例

    這篇文章主要介紹了C++基于對話框的程序的框架,以實例形式講述了C++對話框程序框架,有助于深入理解基于C++的Windows程序設(shè)計,需要的朋友可以參考下
    2014-10-10
  • C語言實現(xiàn)單鏈表的基本功能詳解

    C語言實現(xiàn)單鏈表的基本功能詳解

    鏈表是一個結(jié)構(gòu)體實現(xiàn)的一種線性表,它只能從前往后,不可以從后往前,在實現(xiàn)單鏈表的操作時,需要用指針來操作。本文主要介紹了實現(xiàn)單鏈表的基本功能的代碼示例,具有一定價值,感興趣的同學可以學習一下
    2021-11-11
  • c語言程序設(shè)計文件操作方法示例(CreateFile和fopen)

    c語言程序設(shè)計文件操作方法示例(CreateFile和fopen)

    c主要的文件操作函數(shù)有:CreateFile,CloseHandle,ReadFile,WriteFile,SetFilePointer,GetFileSize。其中的讀寫操作是以字符為單位,獲得文件大小也是以字符為單位。
    2013-12-12
  • C++實現(xiàn)轉(zhuǎn)置矩陣的循環(huán)

    C++實現(xiàn)轉(zhuǎn)置矩陣的循環(huán)

    大家好,本篇文章主要講的是C++實現(xiàn)轉(zhuǎn)置矩陣的循環(huán),感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2022-01-01
  • C語言利用cJSON解析JSON格式全過程

    C語言利用cJSON解析JSON格式全過程

    cJSON是用于解析json格式字符串的一套api,非常好用,下面這篇文章主要給大家介紹了關(guān)于C語言利用cJSON解析JSON格式的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-04-04
  • mfc入門教程之實現(xiàn)一個簡單的計算器

    mfc入門教程之實現(xiàn)一個簡單的計算器

    這篇文章主要介紹了mfc入門教程,手把手教你如何開發(fā)一個簡單的計算器,需要的朋友可以參考下
    2019-04-04
  • C語言實現(xiàn)單鏈表反轉(zhuǎn)

    C語言實現(xiàn)單鏈表反轉(zhuǎn)

    這篇文章主要介紹了C語言實現(xiàn)單鏈表反轉(zhuǎn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-07-07
  • C語言自研定時器計劃任務(wù)語法詳解

    C語言自研定時器計劃任務(wù)語法詳解

    市面主流定時器計劃任務(wù)語法: cron ,但是使用起來非常難受,設(shè)計的比較非人性話語法,我想一般人都沒幾個記住的,所以本文將自研定時器計劃任務(wù)語法,需要的可以參考一下
    2022-09-09

最新評論

乌什县| 静乐县| 涞水县| 漳浦县| 奎屯市| 吉安市| 静海县| 修水县| 华容县| 石屏县| 伽师县| 云阳县| 咸阳市| 新和县| 平乐县| 尼木县| 木里| 布拖县| 屯门区| 灵寿县| 小金县| 安塞县| 大荔县| 四川省| 吉首市| 浦北县| 上林县| 民县| 苏州市| 滨州市| 永昌县| 宁安市| 宣武区| 毕节市| 南和县| 加查县| 华容县| 古浪县| 清苑县| 金秀| 南部县|