C 記憶體操作函式 與 字元處理函式

2021-09-10 15:54:00 字數 3318 閱讀 1621

函式引數為真條件

iscntrl任何控制字元

isspace空白字元(包括空格' ',換頁'\f',回車'\r',換行'\n',製表符'\t'/'\v'

isdigit十進位制數字0~9

isxdigit十六進製制數字,包括所有十進位制數字,小寫字母a~f,大寫字母a~f

islower小寫字母a~z

isupper大寫字母a~z

isalpha字母a~za~z

isalnum字母或者數字,a~z,a~z,0~9

ispunct標點符號,任何不屬於數字或者字母的圖形字元(可列印)

isgraph任何圖形字元

isprint任何可列印字元,包括圖形字元和空白字元

字元轉換函式:

int tolower(int c);

int toupper(int c);

函式引數和返回值都是int型別是因為c語言都預設使用了ascii的編碼方式,用ascii碼表示了一些特定的字元。這裡使用int也可以通過返回-1來標記無效值。

[memcpy的官方文件]:

函式的作用是:【從source的記憶體位置開始向後拷貝num個位元組的資料到destination的記憶體位置】。

void

*memcpy

(void

*destination,

const

void

*source, size_t num)

;

模擬實現

void

*memcpy

(void

* dest,

const

void

* src, size_t num)

return dest;

}

什麼是緩衝區重合

memcpy的原理就是按照src的記憶體內容向dest記憶體逐個進行拷貝,如果出現上圖中的緩衝區重疊現象,就會影響到dest內容的拷貝,造成與src內容不同的拷貝錯誤。

【如圖就是最後乙個字元的拷貝錯誤】

緩衝區重疊問題發生原因:dest指標處於src緩衝區之內,這是標準庫認為的。所以像下圖中的情況就不屬於緩衝區重疊現象:

從圖中可以看到dest指標位於src緩衝區之外,雖然拷貝影響了源記憶體的內容,但是根據庫函式的定義,它是不屬於緩衝區重疊的。

所以就引出了可以解決緩衝區重合問題的允許緩衝區重合的函式memmove

[memmove的官方文件]:

函式的作用與memcpy相同,都是【按位元組拷貝記憶體空間中的內容】。

void

*memmove

(void

*destination,

const

void

*source, size_t num )

;

模擬實現

void

*memmove

(void

* dest,

const

void

* src, size_t num)

}else

}return dest;

}

i>=0恆成立。

如果使用size_t,那麼迴圈對引數進行修改,到達0時,再進行--操作,就會變成乙個很大的數,因為記憶體中負數是按照補碼的形式存放的,所以看似是減為了乙個負數而跳出迴圈,實則恒為乙個正數,是死迴圈現象。使用有符號的int64_t型別就可以避免無符號型別帶來的問題。

如果num傳入為0,那麼引數就從很大的數開始運算。

同樣是無符號型別的弊端,傳入引數為0時,在第乙個for迴圈中需要對num進行減一操作,所以還是變成了乙個非常大的數,一定不會滿足題意。同樣選擇有符號的int64_t型別進行規避。

[memcmp的官方文件]:

函式的作用及引數基本與strncmp完全相同,都是進行內容比較。

memcmp是【比較兩記憶體空間中的內容】,strncmp是比較兩字串。

int memcmp

(const

void

* ptr1,

const

void

* ptr2, size_t num )

;

本部落格所講的記憶體操作函式和字串相關函式最大的區別就是『\0』無關,只與記憶體位元組數有關,使用時一定要注意引數的單位是位元組。

對於大量的字元處理函式不必強制記憶,只需有乙個知曉函式存在的程度即可,使用時可以查閱相關文件直接使用。

C記憶體操作函式

1 c語言跟記憶體分配方式 1 從靜態儲存區域分配.內存在程式編譯的時候就已經分配好,這塊內存在程式的整個執行期間都存在.例如全域性變數 static變數.2 在棧上建立 在執行函式時,函式內區域性變數的儲存單元都可以在棧上建立,函式執行結束時這些儲存單元自動被釋放.棧記憶體分配運算內置於處理器的指...

記憶體操作函式(C)

1.名稱 malloc calloc 功能 動態記憶體分配函式 標頭檔案 include 函式原型 void malloc size t size void calloc int num,size t size 其中 num為分配記憶體塊的個數,size為分配記憶體塊的大小 返回值 分配成功返回分配...

C 記憶體操作函式

void memcpy void dest void src,size t length 函式 函式從src的起始位置複製length個位元組到dest的記憶體起始位置,它並不關心資料型別,只是逐字節的進行複製。注意點 1 dest指標要分配足夠的空間,大於或等於 length個位元組的空間。如果沒...