C C 幾個記憶體處理函式

2021-06-02 17:04:59 字數 3773 閱讀 3744

1、memcpy

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

複製記憶體塊

從source指向的位置直接複製num個位元組的值到destination指向的記憶體塊。

對於這個函式,source和destination指向的物件的底層型別是無關的;結果是資料的乙個二進位制複製。

這個函式不檢查任何結束空字元(null)—— 它總是準確地複製num個位元組。

為了避免溢位,source和destination兩個引數指向的陣列的大小應該至少是num位元組,並且不應該重疊(對於重疊記憶體塊,

memmove是乙個更安全的方法))。

引數

destination

指向內容被複製到的目的陣列的指標,型別被轉換為void*。

source

指向複製資料的源陣列的指標,型別被轉換為void*。

num

要複製的位元組數。

返回值

返回目的指標destination。

example:

/* memcpy example */

#include #include int main ()

output:

str1: sample string

str2: sample string

str3: copy successful

2、memmove

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

移動記憶體塊

從source指向的位置複製num個位元組的值到destination指向的記憶體塊。複製操作的發生就好像使用了中間快取,允許destination和source重疊。

對於這個函式,source和destination指向的物件的底層型別是無關的;結果是資料的乙個二進位制複製。

這個函式不檢查任何結束空字元(null)—— 它總是準確地複製num個位元組。

為了避免溢位,source和destination兩個引數指向的陣列的大小應該至少是num位元組。

引數

destination

指向內容被複製到的目的陣列的指標,型別被轉換為void*。

source

指向複製資料的源陣列的指標,型別被轉換為void*。

num

要複製的位元組數。

返回值

返回目的指標destination。

example:

/* memmove example */

#include #include int main ()

output:

memmove can be very very useful.
3、memset

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

填充記憶體塊

將ptr指向的沒存塊的前num個位元組設定為特定的值value(被解釋為乙個unsigned char型別的值)。

引數

ptr

指向需要填充的記憶體塊的指標。

value

要設定的值,這個值是作為int型傳遞的,但是該函式用這個值的unsigned char型別轉換值來填充記憶體塊。

num

要是指特定值的位元組數。

返回值

返回指標ptr。

example:

/* memset example */

#include #include int main ()

output:

------ every programmer should know memset!

4、memchr

const void * memchr ( const void * ptr, int value, size_t num );

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

在記憶體塊中定位字元

在ptr指向的沒存塊的前num個位元組中搜尋value值得第一次出現(被解釋為乙個unsigned char型別的值),並返回指向該值的指標。

引數

ptr

指向需要被執行搜尋的記憶體塊的指標。

value

需要被定位的值。這個值是作為int型傳遞的,但是該函式用這個值的unsigned char型別轉換值來進行逐位的搜尋。

num

要是分析的位元組數。

返回值

返回指向ptr指向的記憶體塊中value值第一次出現位置的指標。

如果沒有找到value值,則該函式返回null。

example:

/* memchr example */

#include #include int main ()

output:

'p' found at position 5.
5、memcmp

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

比較兩個記憶體塊

將ptr2指向的記憶體塊的籤num個位元組與ptr2指向的記憶體塊的前num個位元組進行比較,如果它們都相符合則返回0,反之則返回乙個指示其中乙個較大的非零值。

ptr1

指向記憶體塊的指標。

ptr2

指向記憶體塊的指標

num

需要比較的位元組數。

返回乙個指示兩個記憶體塊的內容間的關係的整型值。

0值表示兩個記憶體塊的內容是相等的。

乙個大於0的值表示,兩個記憶體塊中第乙個不匹配的位元組是ptr1的比ptr2的大,作為unsigned char型別比較的;小於0則表示相反。

example:

/* memcmp example */

#include #include int main ()

output:

enter a sentence: building

enter another sentence: book

'building' is greater than 'book'.

C C 記憶體拷貝函式

1 char strcpy char dest,const char src 對字串有效,也會將src字串的 0 拷貝至目的字串中,所以在設定目的字串時注意分配合理的記憶體空間 2 char strncpy char dest,const char src,size t count 對字串有效,根據...

幾個檔案處理函式

1.fseek 相關函式 rewind,ftell,fgetpos,fsetpos,lseek 標頭檔案 include 定義函式 int fseek file stream,long offset,int whence 函式說明 fseek 用來移動檔案流的讀寫位置 1 引數stream 為已開啟...

C C 數學處理函式

二 n次方 三 平方根 四 向上取整 向下取整 四捨五入 函式c庫 c 庫 作用原型 abs x 求整型數的絕對值 求浮點數的絕對值 c語言 include include intmain void c include include using namespace std intmain void...