memcpy與memset函式的使用方法

2021-10-08 16:50:00 字數 2209 閱讀 8742

這個主要用於我個人的學習筆記,便於以後查詢,順便分享給大家。

想必在用c的時候難免會與陣列,指標,記憶體這幾樣東西打交道,先以陣列為例,例如有乙個陣列int a[5] = ,我們要將陣列a裡面的資料複製到陣列b中,一般剛剛接觸c語言的我們會怎麼做?我們一般會想到用迴圈來做吧

int i;

int a[5]

=, b[5]

;for

(i =

0; i <

5; i++

)

但是,如果有多個陣列要複製,或者強迫症看不慣自己寫的這麼臃腫的**,不想這樣寫,我們該怎麼辦?這時就要用到接下來要介紹的函式memcpy了。

memcpy

原型:

void

*memcpy

(void

*dest,

const

void

*src, size_t n)

;

需要的標頭檔案:

#include

用法:

memcpy函式是記憶體拷貝函式,功能是從源src所指的記憶體位址的起始位置開始拷貝n個位元組到目標dest所指的記憶體位址的起始位置中。

因為這個函式是直接操作記憶體的,所以我們一開始那個例子的執行效率會大大提高。不懂怎麼用?我們來看一下**就行。

1 #include23

intmain

(void)4

, b[5]

;6/*第乙個引數是要儲存的位置的起始位址,所以我們直接放b

7 *第二個引數是源資料的起始位址,所以我們把a放上去

8 *第三個引數是要複製的記憶體塊的長度,為a的長度sizeof(a)*/

10memcpy

(b, a,

sizeof

(a));11

}

就這樣一行的**,就能代替我們之前的for迴圈,是不是簡潔高效了許多。這個函式的作用不僅僅是這樣,它還可以用與兩個字串的複製,記憶體塊的複製等,各種資料型別都能複製,是不是乙個很棒的函式呢*_*它的更多功能還待各自己去探索,有好用的技巧也請務必告訴我,我必將感謝。

那麼,接下來,我們又有新的問題了,我們已經把a的資料傳給b了,所以想把a清零,我們要怎麼做呢?

一、我們可以像以前那樣用迴圈來做,但是強迫症不接受啊。

二、我們可以用剛剛學到的memcpy函式,再弄乙個初始化的陣列c = ,然後把c複製給a,但是這樣做就有點弄巧成拙了,還不如用方法一。

三、可以用我們接下了要介紹的memset函式,一句話搞定,新姿勢get ?

memset

原型:

void

*memset

(void

*s,int ch, size_t n)

;

用法:

memset是計算機中c/c++語言函式。將s所指向的某一塊記憶體中的前n個位元組的內容全部設定為ch指定的ascii值, 第乙個值為指定的記憶體位址,塊的大小由第三個引數指定,這個函式通常為新申請的記憶體做初始化工作, 其返回值為指向s的指標。

函式解釋:將s中當前位置後面的n個位元組 (typedef unsigned int size_t )用 ch 替換並返回 s 。

memset:作用是在一段記憶體塊中填充某個給定的值,它是對較大的結構體或陣列進行清零操作的一種最快方法。

以我們一開始提出的問題為例:

#include

intmain

(void);

memset

(a,0

,sizeof

(a))

;}

就這樣就成功清零了,是不是很方便。

注意:如果是字元陣列的話,memset可以隨便用,但是如果是其他型別的陣列,一般只用來清零,如果是填充資料就不合適了,如:

memset

(a,1

,sizeof

(a))

;

想用這個來把a所有元素設定為1,是不成功的,為什麼呢?因為memset函式每次填充的資料長度為乙個位元組,即為0x01,而a的乙個元素長度為4個位元組,即0x00000000,如果把0x01填充進去,則填充的結果是0x01010101,而不是我們期待的0x00000001,所以是不合適的,但是用來清零真是一級棒!

這次的筆記就到這裡了,希望能幫到大家。

memset 函式與memcpy 函式

memset memset是c庫函式void memset void s,int ch,size t n 函式解釋 將s中當前位置後面的n個位元組用ch替換並返回s。作用 在一段記憶體塊中填充某個給定的值,它是對較大的結構體或陣列進行清零操作的一種最快的方法。note 盡量用memset將乙個陣列設...

memset與memcpy的用法

最近程式設計過程中,一直遇到mencpy和menset,於是將其用法做個總結,方便後續查閱。memcpy 函式原型 extern void memcpy void dest,void src,unsigned int count 標頭檔案 include 功能 由src所指記憶體區域複製count個...

strcpy函式與memcpy函式

strcpy函式與memcpy函式 6.2 字串與陣列 字串一般是用字元陣列的方式儲存,例如下面的str定義 char str 123456 這裡str是乙個字元陣列,它存放了乙個字串 123456 由於字串還有乙個結束符 0 所以此陣列的長度為7而不是6。6.2.1 strcpy函式與memcpy...