C語言—內存函數

1. memcpy 使用和模擬實現

void* memcpy(void* destination,const void* source,size_t num);

  • 函數memcpy從source的位置開始向后復制num個字節的數據到destination指向的內存位置。
  • 這個函數在遇到 ‘\0’ 的時候并不會停下來
  • 如果source和destination有任何的重疊,復制的結果都是未定義的。
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <assert.h>void* my_memcpy(void* arr2, const void* arr1, size_t num)
{int i = 0;assert(arr2 && arr2);void* ret = arr2;for (i = 0; i < num; i++){*(char*)arr2 = *(char*)arr1;arr2 = (char*)arr2 + 1;arr1 = (char*)arr1 + 1;}return arr2;
}int main()
{int arr1[] = { 1,2,3,4,5,6,7,8,9,10 };int arr2[20] = { 0 };//將arr1中的3 4 5 6 7 拷貝放到arr2中my_memcpy(arr2, arr1 + 2, 20);return 0;
}

2.memmove函數和模擬實現

void* memmove(void* destination,const void* source,size_t num);

相比于memcpy,memmove函數就是直接移動,應用面更加廣。

模擬實現部分:

#include <stdio.h>
#include <assert.h>
#include <string.h>void* my_memmove(void* arr2, const void* arr1, size_t num)
{int i = 0;assert(arr2 && arr2);char* ret = arr2;if (arr2 < arr1)//從前向后{while (num--){*(char*)arr2 = *(char*)arr1;arr2 = (char*)arr2 + 1;arr1 = (char*)arr1 + 1;}}else//從后到前{ while (num--){*((char*)arr2 + num) = *((char*)arr1 + num);}}return ret;
}int main()
{int arr1[] = { 1,2,3,4,5,6,7,8,9,10 };//將arr1中的3 4 5 6 7 拷貝放到arr2中my_memmove(arr1 + 2, arr1, 20);int i = 0;for (i = 0; i < 10; i++){printf("%d ", arr1[i]);}return 0;
}

3. memset 函數的使用

void* memset(void* ptr,int value,size_t num);

memset是用來設置內存的,將內存中的值以字節為單位設置成想要的內容。

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

輸出結果:hello xxxxx

但是:

并沒有出現前四個數組內容是1。原因在于“以字節為單位”。

四個1都賦值到arr【1】中,最后形成了一個非常大的數字。

4.memcmp 函數的使用

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

  • 比較從ptr1和ptr2指針指向的位置開始,向后的num個字節。
#include <stdio.h>
#include <string.h>int main()
{int arr1[] = { 1,2,3,4,5 };//01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 00 05 00 00 00 00int arr2[] = { 1,2,3,6,5 };//01 00 00 00 02 00 00 00 03 00 00 00 06 00 00 00 00 05 00 00 00 00memcmp(arr1, arr2, 12);//返回值為0memcmp(arr1, arr2, 12);//返回值為-1return 0;
}

作者自述:本文主要針對C語言的內存函數的知識。內容中包含了很多總結內容。本文制作不易,求求動動你們發財的小手點個贊和關注,這是對我創造最大的動力。后續我也會跟進內容,盡量一周至少一次,保證內容的質量。如果有想知道的內容或者有建議的地方,歡迎后臺私信或者在本文留言哦。感謝各位的支持捏Thanks?(・ω・)ノ。

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

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

相關文章

Docker 教程-介紹-2

快速了解docker有什么。 Docker簡介 Docker 是一個開源的應用容器引擎&#xff0c;基于Go語言開發&#xff0c;并遵循Apache 2.0協議。它允許開發者將應用及其依賴包打包進一個可移植的容器中&#xff0c;這些容器可以發布到任何支持Docker的Linux或Windows機器上&#xff0c…

神經網絡 torch.nn---Convolution Layers

torch.nn — PyTorch 2.3 documentation torch.nn - PyTorch中文文檔 (pytorch-cn.readthedocs.io) torch.nn和torch.nn.functional的區別 torch.nn是對torch.nn.functional的一個封裝&#xff0c;讓使用torch.nn.functional里面的包的時候更加方便 torch.nn包含了torch.nn.…

Linux日志服務rsyslog深度解析(上)

&#x1f407;明明跟你說過&#xff1a;個人主頁 &#x1f3c5;個人專欄&#xff1a;《Linux &#xff1a;從菜鳥到飛鳥的逆襲》&#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目錄 一、引言 1、日志在Linux系統中的作用 2、rsyslog歷史背景 …

保姆級講解 FTP服務器的搭建、配置與管理

本來目錄很長的 因為感覺不太美觀 所以小標題都刪掉了 本文介紹了 本地用戶的FTP服務器搭建實例匿名用戶的FTP服務器搭建實例虛擬用戶的FTP服務器搭建實例企業常見類型搭建實驗 配置與管理FTP服務器 配置與管理FTP服務器一、FTP相關知識二、項目設計與準備三、項目實施四、認識…

實驗一、網絡傳輸介質————雙絞線 《計算機網絡》

蝙蝠身上長雞毛&#xff0c;忘了自己是什么鳥。 目錄 一、實驗目的 二、實驗內容 1.雙絞線的原理以及分類 2.了解雙絞線的性質、結構與特性 3.掌握雙絞線的制作方法 4.了解雙絞線的材質 5.了解雙絞線的發展趨勢 三、實驗小結 一、實驗目的 1.雙絞線的原理以及分類 2.了…

MyBatisPlus——入門到進階

?作者簡介&#xff1a;大家好&#xff0c;我是 Meteors., 向往著更加簡潔高效的代碼寫法與編程方式&#xff0c;持續分享Java技術內容。&#x1f34e;個人主頁&#xff1a;Meteors.的博客&#x1f49e;當前專欄&#xff1a;知識分享、知識備份?特色專欄&#xff1a; 知識分享…

【GIS教程】土地利用轉移矩陣

隨著科技社會的不斷進步&#xff0c;人類活動對地理環境的影響與塑造日益明顯&#xff0c;土地不斷的侵蝕與改變也導致一系列的環境問題日益突出。土地利用/覆蓋&#xff08;LUCC&#xff09;作為全球環境變化研究的重點問題為越來越多的國際研究機構所重視&#xff0c;研究它的…

Day25 首頁待辦事項及備忘錄添加功能

? 本章節,完成首頁待辦事項及備忘錄添加功能 一.修改待辦事項和備忘錄邏輯處理類,即AddMemoViewModel和AddTodoViewModel 在 AddMemoViewModel邏輯處理類中,為了支持與其關聯的View視圖文件的數據綁定,需要定義一個與視圖文件相匹配的實體類 Model。這個Model將包含 View中…

圖像算法---自動對焦AF

一&#xff0c;CDAF反差對焦原理 CDAF&#xff0c;全稱Contrast Detection Auto Focus&#xff0c;即反差式對焦或對比度檢測自動對焦&#xff0c;是一種廣泛應用于入門級數碼相機和相機模塊化智能手機上的自動對焦技術。以下是關于CDAF反差對焦的詳細介紹&#xff1a; 工作原…

測繪航空攝影乙級資質升級為甲級的過渡期規劃

升級測繪航空攝影乙級資質為甲級通常需要一個詳細的過渡期規劃&#xff0c;這個過程涉及提升技術力量、積累業績、完善管理體系等多個方面。以下是一個概括性的過渡期規劃框架&#xff0c;具體實施時需結合實際情況和最新的資質標準進行調整&#xff1a; 1. 了解最新資質標準 …

每日AI資訊-20240606

智普AI推出全新開源大模型GLM-4-9B 智譜AI日前推出全新開源模型GLM-4-9B&#xff0c;該尺寸模型首次具備多模態能力。據了解&#xff0c;GLM-4-9B&#xff0c;最高支持1M/約兩百萬字上下文輸入&#xff0c;相當于2本《紅樓夢》或125篇論文的長度。性能上&#xff0c;GLM-4-9B函…

《手把手教你》系列練習篇之13-python+ selenium自動化測試 -壓軸篇(詳細教程)

1. 簡介 “壓軸”原本是戲曲名詞&#xff0c;指一場折子戲演出的倒數第二個劇目。在現代社會中有很多應用&#xff0c;比如“壓軸戲”&#xff0c;但壓軸也是人們知識的一個盲區。“壓軸”本意是指倒數第二個節目&#xff0c;而不是人們常說的倒數第一個&#xff0c;倒數第一個…

苗情生態自動監測站

TH-MQ1在現代農業發展中&#xff0c;苗情生態自動監測站的應用已經變得日益重要。這種技術不僅為農業生產提供了實時的數據支持&#xff0c;還通過精準監測和科學決策&#xff0c;提高了農業生產的效率和質量。 首先&#xff0c;苗情生態自動監測站的優勢在于其能夠實現精準監…

Java并發編程:線程與并發工具

Java并發編程:線程與并發工具 引言 在現代計算機程序中,并發編程是一個不可避免的主題。無論是提升應用程序性能,還是處理多個任務并發執行,Java為開發者提供了豐富的并發編程工具。在本篇文章中,我們將深入探討Java的并發編程,包括線程的基礎知識、線程池的使用以及常…

全流程透明雙語大語言模型MAP-Neo,4.5T 高質量數據訓練

前言 近年來&#xff0c;大語言模型 (LLM) 已經成為人工智能領域最熱門的研究方向之一&#xff0c;并在各種任務中展現出前所未有的性能。然而&#xff0c;由于商業利益的驅動&#xff0c;許多最具競爭力的模型&#xff0c;例如 GPT、Gemini 和 Claude&#xff0c;其訓練細節和…

讀書筆記-《軟件定義安全》之一:SDN和NFV:下一代網絡的變革

第1章 SDN和NFV&#xff1a;下一代網絡的變革 1.什么是SDN和NFV 1.1 SDN/NFV的體系結構 SDN SDN的體系結構可以分為3層&#xff1a; 基礎設施層由經過資源抽象的網絡設備組成&#xff0c;僅實現網絡轉發等數據平面的功能&#xff0c;不包含或僅包含有限的控制平面的功能。…

Unity Magica Cloth2 使用教程

視頻教程 參考文章 前提&#xff1a; 找到角色的模型 模之屋&#xff0c;我這里準備了轉好FBX格式的吟霖模型點擊自取【源自 模之屋】 角色舞蹈動畫 點擊下載【源自 Mixamo】 導入Unity【如何將原神的角色導入Unity】 三渲二 (必須是2022.3LTS和URP項目) Magica Cloth2 頭…

深入探索Stage #13:CSS層疊樣式表的IE特性偽協議注入

在網絡安全領域&#xff0c;跨站腳本攻擊&#xff08;XSS&#xff09;是一種常見的攻擊手段。隨著Web技術的不斷發展&#xff0c;攻擊者也在不斷探索新的攻擊途徑。本文將詳細介紹如何利用IE瀏覽器的特性&#xff0c;通過CSS層疊樣式表進行XSS攻擊。 實驗環境搭建 為了模擬IE…

spring boot 白盒測試實戰

假設項目中存在以下代碼&#xff1a; 常量類&#xff1a;public final static String NUMBER_REGEX "\\d"; service&#xff1a;return ReUtil.getGroup0(Constants.NUMBER_REGEX, waybill); 代碼解析 解釋&#xff1a; return ReUtil.getGroup0(Constants.NUMB…

python學習 - 使用OpenCV庫(cv2)和imutils庫實現輔助答題卡判別

測試數據見文章頂部位置資源&#xff01;&#xff01;&#xff01; 使用了OpenCV庫&#xff08;cv2&#xff09;和imutils庫。代碼的主要目的是處理圖像中的問題&#xff0c;如識別圖像中的文字&#xff0c;并對其進行分析和排序。 輔助答題卡判別 # -*- coding:utf-8 -*- fr…