【C語言內存函數】

目錄

1.memcpy

使用

模擬實現

2.memmove

使用

模擬實現

3.memset

使用

4.memcmp

使用


1.memcpy

使用

void * memcpy ( void * destination, const void * source, size_t num );目的地址                源地址        字節數

destination:指向要復制內容的目標數組的指針,類型轉換為void*類型的指針。

source:指向要復制的數據源的指針,類型轉換為const void*類型的指針。

num:要復制的字節數。size_t是一個無符號整數類型。

1.函數memcpy從源地址(destimation)的位置開始向后復制num個字節的數據到目的地址(source)指向的內存位置

2.這個函數在遇到 '\0' 的時候并不會停下來
3.如果source和destination有任何的重疊,復制的結果都是未定義的。

演示:

int main()
{int arr1[] = { 1,2,3,4,5,6,7,8,9,10 };int arr2[10] = { 0 };memcpy(arr2, arr1, 20);//從arr1->arr2     20個字節int i = 0;
//這里打印10個方便查看for (i = 0; i < 10; i++){printf("%d ", arr2[i]);}return 0;
}

結果:

模擬實現

void* my_memcpy(void* dest, const void* src, size_t num)
{assert(dest);//判斷是否為空assert(src);void* ret = dest;//防止返回的地址變動
//逐個傳入while (num--){*(char*)dest = *(char*)src;dest = (char*)dest + 1;src = (char*)src + 1;}return(ret);
}
int main()
{int arr1[] = { 1,2,3,4,5,6,7,8,9,10 };int arr2[10] = { 0 };my_memcpy(arr2, arr1, 20);//從arr1->arr2     20個字節int i = 0;
//這里打印10個方便查看for (i = 0; i < 10; i++){printf("%d ", arr2[i]);}return 0;
}

結果:

2.memmove

使用

其實跟memcpy差不多

void * memmove ( void * destination, const void * source, size_t num );目的地址                源地址        字節數

destination:指向要復制內容的目標數組的指針,類型轉換為void*類型的指針。
source:指向要復制的數據源的指針,類型轉換為constvoid*類型的指針。
num:要復制的字節數。size t是一個無符號整數類型。

1.將num字節的值從源地址指向的位置復制到目的地址指向的內存塊。

2.復制就像使用了中間緩沖區一樣進行,從而允許目標和源重疊。

3.當源地址看見和目標地址出現重疊,可以使用memmove


?演示一下,如何重疊的

將源地址的數據傳入源地址內(實現在同一個看見重疊)

int main()
{int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
//將源地址數據傳入(源地址+2) 發生重疊memmove(arr + 2, arr, 20);int i = 0;for (i = 0; i < 10; i++){printf("%d ", arr[i]);}return 0;
}

這里傳入的20個字節? 從(arr+2)開始? ?后面20個字節進行重疊

模擬實現

void* my_memmove(void* dest, const void* src, size_t count)
{assert(src);//判斷是否為空void* ret = dest;//防止返回的地址變動
//這里進行判斷位置  從哪里開始進行替換if (dest <= src || (char*)dest >= ((char*)src + count)) {while (count--) {*(char*)dest = *(char*)src;dest = (char*)dest + 1;src = (char*)src + 1;}}else {dest = (char*)dest + count - 1;src = (char*)src + count - 1;while (count--) {*(char*)dest = *(char*)src;dest = (char*)dest - 1;src = (char*)src - 1;}}return(ret);
}
int main()
{int arr[] = { 1,2,3,4,5,6,7,8,9,10 };my_memmove(arr + 2, arr, 20);int i = 0;for (i = 0; i < 10; i++){printf("%d ", arr[i]);}return 0;
}

結果:

3.memset

使用

void * memset ( void * ptr, int value, size_t num );源地址   要變的內容   字節數

ptr指針,指向要填充的內存塊。
value:進行設置。該值以int形式傳遞,但函數使用該值的無符號字符轉換填充內存塊。
num:要設置為值的字節數。size_t是一個無符號整數類型。

1.設置內存,將內存中的值以字節為單位設置成想要的內容。

這里就不模擬了(循環替換)

int main()
{char str[] = "hello qingtian";memset(str, 'x', 5);printf(str);return 0;
}

結果:

4.memcmp

使用

int memcmp ( const void * ptr1, const void * ptr2, size_t num );地址1                   地址2        字節數

ptr1:內存塊的指針。
ptr2:內存塊的指針。
num:要比較的字節數。

1.進行比較ptr1和ptr2 從0開始比較num個

int main()
{char arr1[] = "abcdef";char arr2[] = "abdd";int n;n = memcmp(arr1, arr2, sizeof(arr2));if (n > 0)printf("'%s' 大于 '%s'\n", arr1, arr2);else if (n < 0)printf("'%s' 小于 '%s'\n", arr1, arr2);elseprintf("'%s' 等于 '%s'\n", arr1, arr2);return 0;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/39353.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/39353.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/39353.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

20240703 每日AI必讀資訊

&#x1f916;爆火Character AI慘遭閹割 美國00后集體“失戀” - Character AI曾是00后最火爆的社交軟件&#xff0c;但用戶發現對話模型變得冷淡&#xff0c;失去趣味。 - 用戶流失嚴重&#xff0c;面臨成本高、競爭激烈的挑戰&#xff0c;甚至遭到挖角。 - 盡管困難重重&a…

淘寶API接口開發系列:淘寶訂單詳情API接口與物流電子面單API接口概述

淘寶訂單詳情API接口與物流電子面單API接口概述 在電子商務領域&#xff0c;API&#xff08;應用程序接口&#xff09;扮演著至關重要的角色&#xff0c;它們使得不同的系統能夠相互通信&#xff0c;實現數據的共享和交換。淘寶作為國內最大的電商平臺之一&#xff0c;其提供的…

C# 多線程造成CPU占用率高

當線程多的時候就會造成CPU內存占用率過高 private void button1_Click(object sender, EventArgs e){Thread TH1, TH2, TH3, TH4, TH5;TH1 new Thread(Thread1){IsBackground true};TH2 new Thread(Thread2){IsBackground true};TH3 new Thread(Thread3){IsBackground t…

最小步數模型——AcWing 1107. 魔板

最小步數模型 定義 最小步數模型通常是指在某種約束條件下&#xff0c;尋找從初始狀態到目標狀態所需的最少操作或移動次數的問題。這類問題廣泛存在于算法、圖論、動態規劃、組合優化等領域。具體來說&#xff0c;它涉及確定一個序列或路徑&#xff0c;使得按照特定規則執行…

jenkins在使用pipeline時,為何沒有方塊形視圖

項目場景&#xff1a; 安裝完Jenkins時后&#xff0c;通過pipeline創建的項目任務。 問題描述 在立即構建后&#xff0c;沒有顯示每個階段的視圖。 原因分析&#xff1a; 原因是&#xff0c;剛安裝的Jenkins&#xff0c;這個視圖不是Jenkins自帶的功能&#xff0c;而必須安裝…

《5小時吃透小red書》讀書筆記之打造爆款筆記原理

1.流量推送邏輯&#xff1a; 一篇筆記發布并審核后&#xff0c;平臺根據內容提取關鍵詞&#xff0c;開始小范圍發布測試&#xff1b;初次先分發到1000個興趣用戶&#xff0c;根據這1000個用戶等反饋決定是否給該筆記更多流量和推薦&#xff1b;考核標準是點擊率、完播率、互動…

高校實訓室:老年實訓室的教學案例

本文以高校老年實訓室為研究對象&#xff0c;通過詳細分析具體的教學案例&#xff0c;探討了老年實訓室在提升學生專業素養和實踐能力方面的重要作用。文中介紹了多個具有代表性的教學案例&#xff0c;包括健康評估、康復護理和心理關懷等方面&#xff0c;闡述了其教學目標、實…

EDA 虛擬機 Synopsys Sentaurus TCAD 2017.09 下載

下載地址&#xff08;制作不易&#xff0c;下載使用需付費&#xff0c;不能接受的請勿下載&#xff09;&#xff1a; 鏈接&#xff1a;https://pan.baidu.com/s/1327I58gvV1usWSqSrG7KXw?pwdo03i 提取碼&#xff1a;o03i

Boss直聘,無良廠商,亂封號

耽誤招工作&#xff0c;瞎吉兒封號 哥們單身 需要女生多的公司 問一下都不行&#xff0c;什么尿性 直接就給你封了 裝什么呢 辣雞boss 倒閉吧趕緊 我是狗子&#xff0c;希望你倒閉&#xff01;

枚舉類示例

package net.cnki.editor.costcenter.pojo.enums;import lombok.Getter;import java.util.Arrays;/*** 費用枚舉接口*/ public interface CosttypeEnumInterface {/*** 費用類型和費用信息-> 費用性質, 支付人 , 收取人, 費用信息狀態*/Getterenum CosttypePayerAndReceiveE…

使用PHP實現Web爬蟲

web爬蟲是一種自動化工具&#xff0c;可以瀏覽互聯網上的網頁&#xff0c;收集信息并存儲在一個數據庫中。在今天的大數據時代&#xff0c;web爬蟲越來越重要&#xff0c;因為它可以查找大量信息并進行數據分析。在本文中&#xff0c;我們將學習如何使用php編寫web爬蟲&#xf…

Radxa 學習摘錄

文章目錄 1、參考資料2、硬件知識CIF 和 ISP 3、shell4、交叉編譯工具鏈5、問題6、DTS7、驅動 1、參考資料 技術論壇&#xff08;推薦&#xff09; 官方資料下載 wiki資料 u-boot 文檔 u-boot 源碼 內核文檔 內核源碼 原理圖 radxa-repo radxa-build radxa-pkg radxa-doc…

尋找最適合你的交易風格

與Eagle Trader一起&#xff0c;您將擁有一位堅不可摧的合作伙伴&#xff0c;為您的交易之路增添堅實信心&#xff0c;并重塑交易體驗的每一個細節。我們量身定制的交易環境&#xff0c;更能讓您精準捕捉并駕馭符合您獨特交易風格的卓越條件&#xff0c;讓交易之旅更加自由暢快…

Python容器 之 字典--定義

1.字典的介紹 1, 字典 dict, 使用 {} 表示 2, 字典是由鍵(key)值(value)對組成的, key: value 3, 一個鍵值對是一組數據, 多個鍵值對之間使用 逗號隔開 4, 在一個字典中, 字典的鍵 是不能重復的&#xff0c;如果重復原數據會被覆蓋 5, 字典中的鍵 主要使用 字符串類型, 可以是…

Mac可以卸載掉系統自帶的軟件嗎 Mac第三方軟件無法卸載是為什么

在使用Mac電腦時&#xff0c;有時候我們會發現系統預裝的一些應用并不常用或者不符合個人需求&#xff0c;想要將它們卸載掉。然而&#xff0c;對于系統自帶的軟件&#xff0c;卸載并不簡單&#xff0c;需要謹慎對待以免影響系統穩定性和功能正常運行。下面我們來看看Mac可以卸…

Firefox 編譯指南2024 Windows10-使用Git 管理您的Firefox(五)

1. 引言 在現代軟件開發中&#xff0c;版本控制系統&#xff08;VCS&#xff09;是不可或缺的工具&#xff0c;它不僅幫助開發者有效管理代碼的變化&#xff0c;還支持團隊協作與項目管理。Mercurial 是一個高效且易用的分布式版本控制系統&#xff0c;其設計目標是簡潔、快速…

Linux CentOS Python 離線安裝 pip 使用.whl文件離線安裝

1、系統版本 cat /etc/redhat-release #查看系統版本命令 輸出&#xff1a;CentOS Linux release 7.9.2009 (Core) 2、在pip 官方網站 下載.whl文件&#xff1a;pip-24.1.1-py3-none-any.whl 3、安裝 python -m pip install pip-24.1.1-py3-none-any.whl 3、安裝之后運行…

Windows使用-設置虛擬內存及注意事項

文章目錄 前言一、設置虛擬內存打開“系統屬性”對話框在“系統屬性”對話框設置虛擬內存二、虛擬內存設置引發問題C盤空間不足桌面引用程序無法正常使用總結前言 虛擬內存是操作系統為應用程序提供的一種內存管理機制,最早是用于解決物理內存不足而影響操作系統運行效率問題…

【antd + vue】表格行合并,同時使用插槽

一、需求說明 表格中&#xff0c;如果一個學校有多個考試科目&#xff0c;則分行展示&#xff0c;其余列&#xff0c;則合并為一行展示&#xff0c;如圖所示 二、需求分析 1、表格行合并 相當于有4行&#xff0c;其中1、2行是同一個學校包含不同考試科目及對應人次的數據&am…

判斷磁盤是SSD或HDD盤

1. 判斷磁盤是SSD或HDD盤 1、沒有使用raid方案 lsblk -d -o name,rota命令&#xff0c;0表示SSD&#xff0c;1表示HDD # lsblk -d -o name,rota NAME ROTA sda 0 sdb 1 sdc 12、使用raid方案 下載工具 wget https://raw.githubusercontent.com/eLvErDe/hwraid…