国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

來不及哀悼了,接下來上場的是C語言內(nèi)存函數(shù)memcpy,memmove,memset,memcmp

這篇具有很好參考價值的文章主要介紹了來不及哀悼了,接下來上場的是C語言內(nèi)存函數(shù)memcpy,memmove,memset,memcmp。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

今天又來寫一篇C的文章,這里要講的是C語言中的幾個內(nèi)存函數(shù),主要是講解功能和用法,望能耐心觀看哦。望官方也多多曝光。

目錄

memcpy

?memmove

memset

?memcmp



memcpy

?memcpy??是?C?語言標(biāo)準(zhǔn)庫中的一個函數(shù),用于復(fù)制內(nèi)存塊的內(nèi)容。它的主要作用是將一個源內(nèi)存區(qū)域的內(nèi)容復(fù)制到另一個目標(biāo)內(nèi)存區(qū)域,且是按照所給字節(jié)數(shù)進(jìn)行復(fù)制。
?來不及哀悼了,接下來上場的是C語言內(nèi)存函數(shù)memcpy,memmove,memset,memcmp,C語言,c語言,開發(fā)語言,visualstudio
函數(shù)原型:
?
?

void?*memcpy(void?*dest,?const?void?*src,?size_t?n);



?
參數(shù)說明:
?
?dest?:指向目標(biāo)內(nèi)存區(qū)域的指針,復(fù)制的結(jié)果將存儲在這個位置。
? src?:指向源內(nèi)存區(qū)域的指針,要復(fù)制的內(nèi)容將從這個位置讀取。
? n?:要復(fù)制的字節(jié)數(shù)。

?
函數(shù)行為:
?
1.??memcpy??會從源內(nèi)存區(qū)域復(fù)制指定數(shù)量的字節(jié)到目標(biāo)內(nèi)存區(qū)域。
2.?復(fù)制是按字節(jié)進(jìn)行的,不考慮數(shù)據(jù)類型或字節(jié)序。
3.?函數(shù)返回指向目標(biāo)內(nèi)存區(qū)域的指針。

?
代碼使用例子:

#include <stdio.h>
#include <string.h>
int main()
{
	int arr1[] = { 1,2,3,4,5,6,7,8,9,10 };
	int arr2[10] = { 0 };
	memcpy(arr2, arr1, 20);
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		printf("%d ", arr2[i]);
	}
	return 0;
}

來不及哀悼了,接下來上場的是C語言內(nèi)存函數(shù)memcpy,memmove,memset,memcmp,C語言,c語言,開發(fā)語言,visualstudio?

代碼解析:上面代碼中我們調(diào)用函數(shù)memcpy函數(shù),進(jìn)行傳參,將arr1前20個字節(jié)的內(nèi)容,復(fù)制到arr2中。根據(jù)結(jié)果確實如此,20個字節(jié)為5個整形元素大小,所以這里從arr1中1,2,3,4,5 復(fù)制到arr2中,至于后面的5個0,是因為在VS中如果未對數(shù)組中進(jìn)行初始化的元素,會默認(rèn)為0.


為了讓大家更了解這個函數(shù),這里為大家模擬實現(xiàn)一下memcpy函數(shù):

void* Memcpy(void* dst, const void* src, size_t count)
{
	void* ret = dst;
	assert(dst);
	assert(src);
	/*
	* copy from lower addresses to higher addresses
	*/
	while (count--) {
		*(char*)dst = *(char*)src;
		dst = (char*)dst + 1;
		src = (char*)src + 1;
	}
	return(ret);
}

這里面強(qiáng)制轉(zhuǎn)化為char*的指針是因為讓指針dst和src都是一個一個字節(jié)的往后訪問。?

?需要注意的是:memcpy是不能對兩個有重疊部分的指針完成準(zhǔn)確的復(fù)制的,所以我們需要看下一個有重疊部分也可以完成操作的函數(shù)memmove。


?memmove

?memmove??是?C?語言標(biāo)準(zhǔn)庫中的一個函數(shù),它與??memcpy??類似,用于復(fù)制內(nèi)存塊的內(nèi)容。與??memcpy??不同的是,?memmove??可以在源和目標(biāo)內(nèi)存區(qū)域有重疊的情況下安全地進(jìn)行復(fù)制。
?
來不及哀悼了,接下來上場的是C語言內(nèi)存函數(shù)memcpy,memmove,memset,memcmp,C語言,c語言,開發(fā)語言,visualstudio
函數(shù)原型:
?

?

void?*memmove(void?*dest,?const?void?*src,?size_t?n);


?
?參數(shù)說明:
?

?dest?:指向目標(biāo)內(nèi)存區(qū)域的指針,復(fù)制的結(jié)果將存儲在這個位置。
? src?:指向源內(nèi)存區(qū)域的指針,要復(fù)制的內(nèi)容將從這個位置讀取。
? n?:要復(fù)制的字節(jié)數(shù)。

?
函數(shù)行為:
?
1.??memmove??用于在不同的內(nèi)存位置之間復(fù)制數(shù)據(jù),即使源和目標(biāo)區(qū)域有重疊也能正確工作。
2.?它會根據(jù)源和目標(biāo)的相對位置,以適當(dāng)?shù)姆绞綇?fù)制數(shù)據(jù),確保結(jié)果是正確的。


?
代碼簡單使用例子:

#include <stdio.h>
#include <string.h>
int main()
{
	int arr1[] = { 1,2,3,4,5,6,7,8,9,10 };
	memmove(arr1 + 2, arr1, 20);
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		printf("%d ", arr1[i]);
	}
	return 0;
}

來不及哀悼了,接下來上場的是C語言內(nèi)存函數(shù)memcpy,memmove,memset,memcmp,C語言,c語言,開發(fā)語言,visualstudio

?

代碼解析:這里很明顯即使我們調(diào)用memmove函數(shù)時傳過去的指針地址是明顯有重疊部分的,但是這里我們看見結(jié)果確實是沒問題的,將arr的前20個字節(jié)即5個元素復(fù)制到arr+2往后的元素。?


還是為了大家更好理解函數(shù)的邏輯,給大家模擬實現(xiàn)一下memmove函數(shù) :

void* memmove(void* dst, const void* src, size_t count)
{
	void* ret = dst;
	if (dst <= src || (char*)dst >= ((char*)src + count)) {
		/*
		* Non-Overlapping Buffers
		* copy from lower addresses to higher addresses
		*/
		while (count--) {
			*(char*)dst = *(char*)src;
			dst = (char*)dst + 1;
			src = (char*)src + 1;
		}
	}
	else {
		/*
		* Overlapping Buffers
		* copy from higher addresses to lower addresses
		*/
		dst = (char*)dst + count - 1;
		src = (char*)src + count - 1;
		while (count--) {
			*(char*)dst = *(char*)src;
			dst = (char*)dst - 1;
			src = (char*)src - 1;
		}
	}
	return(ret);
}

?這里面強(qiáng)制轉(zhuǎn)化為char*的指針是因為讓指針dst和src都是一個一個字節(jié)的往后訪問。?


memset

?memset??是?C?語言標(biāo)準(zhǔn)庫中的一個函數(shù),用于將指定的內(nèi)存區(qū)域填充為特定的值。
?
來不及哀悼了,接下來上場的是C語言內(nèi)存函數(shù)memcpy,memmove,memset,memcmp,C語言,c語言,開發(fā)語言,visualstudio
函數(shù)原型:
?
?

void?*memset(void?*str,?int?c,?size_t?n);


?
?
參數(shù)說明:
?
?str?:指向要填充的內(nèi)存區(qū)域的指針。
?c?:要填充的特定值。通常是一個整數(shù)類型的值。
?n?:要填充的字節(jié)數(shù)。

?
函數(shù)行為:
?
1.??memset??使用指定的值??c??填充內(nèi)存區(qū)域的前??n??個字節(jié)。
2.?填充是按字節(jié)進(jìn)行的,無論內(nèi)存區(qū)域的實際數(shù)據(jù)類型如何。


?
簡單代碼使用例子:

#include <stdio.h>
#include <string.h>
int main()
{
	char str[] = "hello world";
	memset(str, 'x', 6);
	printf(str);
	return 0;
}

?來不及哀悼了,接下來上場的是C語言內(nèi)存函數(shù)memcpy,memmove,memset,memcmp,C語言,c語言,開發(fā)語言,visualstudio

函數(shù)較為簡單就不多加解釋了。?


?memcmp

memcmp是一個用于比較內(nèi)存區(qū)域的函數(shù)

來不及哀悼了,接下來上場的是C語言內(nèi)存函數(shù)memcpy,memmove,memset,memcmp,C語言,c語言,開發(fā)語言,visualstudio

?函數(shù)原型:

int memcmp ( const void * ptr1, const void * ptr2, size_t num );

?

參數(shù)說明:兩個需要比較的內(nèi)存塊的起始地址?ptr1?和?ptr2,以及需要比較的字節(jié)數(shù)?num。

函數(shù)行為:

函數(shù)會比較?ptr1?和?ptr2?指向的內(nèi)存塊前?num?個字節(jié)的內(nèi)容,返回值為整型,表示比較結(jié)果:如果兩個內(nèi)存塊的前?num?個字節(jié)完全相等,則返回0;如果?ptr1?指向的內(nèi)存塊小于?ptr2?指向的內(nèi)存塊,則返回負(fù)數(shù);如果?ptr1?指向的內(nèi)存塊大于?ptr2?指向的內(nèi)存塊,則返回正數(shù)。
?

代碼簡單實用例子:

#include <stdio.h>
#include <string.h>
int main()
{
	char buffer1[] = "hello";
	char buffer2[] = "good";
	int n;
	n = memcmp(buffer1, buffer2, sizeof(buffer1));
	if (n > 0)
		printf("'%s' 比 '%s'大.\n", buffer1, buffer2);
	else if (n < 0)
		printf("'%s' 比 '%s'小.\n", buffer1, buffer2);
	else
		printf("'%s' 與 '%s'一樣大.\n", buffer1, buffer2);
	return 0;
}

?來不及哀悼了,接下來上場的是C語言內(nèi)存函數(shù)memcpy,memmove,memset,memcmp,C語言,c語言,開發(fā)語言,visualstudio


今天文章就結(jié)束了,覺得有用,可以點(diǎn)個贊再走唔。來不及哀悼了,接下來上場的是C語言內(nèi)存函數(shù)memcpy,memmove,memset,memcmp,C語言,c語言,開發(fā)語言,visualstudio?文章來源地址http://www.zghlxwxcb.cn/news/detail-835314.html

到了這里,關(guān)于來不及哀悼了,接下來上場的是C語言內(nèi)存函數(shù)memcpy,memmove,memset,memcmp的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 接下來講一講Vue的數(shù)據(jù)代理

    接下來講一講Vue的數(shù)據(jù)代理

    首先講一下原生js的數(shù)據(jù)代理 原生的 ?Object.defineProperty() 可以通過這個方法動態(tài)的為對象添加字段,并未對象字段設(shè)置數(shù)據(jù)代理 vue中的數(shù)據(jù)代理 這段代碼應(yīng)該見怪不怪了,我們創(chuàng)建vue對象的時候會創(chuàng)建一個data對象傳給_data,實際上data和vm中的_data就是完全一樣的,我們修改其

    2024年02月17日
    瀏覽(19)
  • 我從來不理解JavaScript閉包,但我用了它好多年

    我從來不理解JavaScript閉包,但我用了它好多年

    前言 ??? 大家好,我是南木元元,熱衷分享有趣實用的文章,希望大家多多支持,一起進(jìn)步! ???? 個人主頁: 南木元元 你是否學(xué)習(xí)了很久JavaScript但還沒有搞懂閉包呢?今天就來聊一下被很多人譽(yù)為JavaScript中最難理解的概念之一的閉包。 目錄 閉包的概念 閉包產(chǎn)生的原因

    2024年02月05日
    瀏覽(88)
  • 懂點(diǎn)自動化基礎(chǔ)就要25k? 面試官:給你10K,愛來不來

    懂點(diǎn)自動化基礎(chǔ)就要25k? 面試官:給你10K,愛來不來

    公司前段缺人,也面了不少測試,結(jié)果竟然沒有一個合適的。 一開始瞄準(zhǔn)的就是中級的水準(zhǔn),也沒指望來大牛,提供的薪資在10-25k,面試的人很多,但平均水平很讓人失望??春啔v很多都是3年工作經(jīng)驗, 但面試中,不提測試工具,僅僅基礎(chǔ)的技術(shù)很多也知之不詳,多數(shù)人數(shù)

    2024年02月07日
    瀏覽(28)
  • 梅斯健康再沖刺上市:研發(fā)投入遠(yuǎn)不及營銷費(fèi)用,啟明、騰訊為股東

    梅斯健康再沖刺上市:研發(fā)投入遠(yuǎn)不及營銷費(fèi)用,啟明、騰訊為股東

    撰稿|湯湯 來源|貝多財經(jīng) 日前,梅斯健康控股有限公司(下稱“梅斯健康”)再次向港交所遞交招股書,準(zhǔn)備在港交所主板上市,中金公司和MACQUARIE為其聯(lián)席保薦人。據(jù)貝多財經(jīng)了解,這是梅斯健康第二次遞表。 ?貝多財經(jīng)了解到,梅斯健康的全稱為上海梅斯醫(yī)藥科技有限公

    2024年02月04日
    瀏覽(18)
  • SSH連接下Git fetch/pull/push 速度太慢的一些解決辦法

    SSH連接下Git fetch/pull/push 速度太慢的一些解決辦法

    有時候某些git的代碼庫在fetch遠(yuǎn)端的時候會非常慢,速度只有幾十k或者幾k。這個速度拉取一整個代碼庫可能要花費(fèi)一晚上或者一天時間。甚至在每天更新已有代碼庫時候也會花上十分鐘。可以嘗試一下這些方法來提升拉取遠(yuǎn)端代碼的速度: 1. Git 版本過低的話可能會導(dǎo)致這個

    2024年02月10日
    瀏覽(47)
  • 不合格機(jī)器人工程專業(yè)講師的“急于求成”和“過猶不及”

    不合格機(jī)器人工程專業(yè)講師的“急于求成”和“過猶不及”

    1.?智能機(jī)器人方向大學(xué)本科部分教學(xué)素材整理(2018) 2.?寫給未來的自己 3.??機(jī)器人工程的工作與考研之困惑“效果越來越差” ? 慢+簡+靜 斷+舍+離 好像所有人都很累。 “急于求成”,“拔苗助長”這些詞語意思很直白。 在機(jī)器人工程學(xué)習(xí)中,不管是學(xué)生,還是老師都會

    2024年02月19日
    瀏覽(25)
  • Spring Boot 宣布移除 run 命令,真讓我猝不及防。。。

    Spring Boot 宣布移除 run 命令,真讓我猝不及防。。。

    大家好,我是棧長。 昨天有粉絲反饋棧長《Spring Boot 核心技術(shù)課》中的一個問題: Spring Boot CLI 命令行工具中的 run 命令找不到了? 這是什么鬼?后面為你揭曉原由! Spring Boot CLI 全稱即: Spring Boot Command-Line Interface ,是一個構(gòu)造 Spring Boot 項目命令行工具,可用于從 start.sp

    2024年02月10日
    瀏覽(17)
  • 瀾滄古茶在港交所上市申請失效:收入不及八馬茶業(yè),股東提前套現(xiàn)

    瀾滄古茶在港交所上市申請失效:收入不及八馬茶業(yè),股東提前套現(xiàn)

    12月1日,貝多財經(jīng)從港交所披露易了解到,普洱瀾滄古茶股份有限公司(下稱“瀾滄古茶”)的上市申請材料失效,目前已無法正常查看或下載。據(jù)貝多財經(jīng)了解,“失效”并不意味著上市失敗。 ?事實上,招股書“失效”是港交所的正常機(jī)制,代表擬發(fā)行人的財務(wù)審計數(shù)據(jù)

    2024年02月08日
    瀏覽(22)
  • “被裁員之前,沒得到任何風(fēng)聲,措手不及...” 一個在職6年測試工程師內(nèi)心獨(dú)白

    “被裁員之前,沒得到任何風(fēng)聲,措手不及...” 一個在職6年測試工程師內(nèi)心獨(dú)白

    一個碼農(nóng)(軟件測試工程師)的自白 小張: 我們用工作五年的積蓄,在這個一線城市買了房子,買了車子,然后領(lǐng)證。我也在6年前進(jìn)入了一個很多人夢寐以求新的公司 碼農(nóng)的新生活開始了。在這家公司里,我第一次真正領(lǐng)略到“人外有人,天外有天”的含義。所在的團(tuán)隊各

    2023年04月24日
    瀏覽(24)
  • Git clone下來的分支不完整

    將倉庫 git clone 到本地后發(fā)現(xiàn)本地缺失了一些遠(yuǎn)程倉庫的分支。一般發(fā)生在 git clone —depth 1 設(shè)置克隆深度時發(fā)生。因為有些大型項目一次性克隆容易出錯,所以只克隆一層深度。 如遠(yuǎn)程有分支 branch_a ,克隆下來后使用 git branch -av 命令查看所有分支沒有顯示該分支,該如何解

    2024年02月16日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包