函式引數為真條件
iscntrl
任何控制字元
isspace
空白字元(包括空格' '
,換頁'\f'
,回車'\r'
,換行'\n'
,製表符'\t'/'\v'
)
isdigit
十進位制數字0~9
isxdigit
十六進製制數字,包括所有十進位制數字,小寫字母a~f
,大寫字母a~f
islower
小寫字母a~z
isupper
大寫字母a~z
isalpha
字母a~z
或a~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個位元組的空間。如果沒...