memset() 描述 C 庫函數 void *memset(void *str, int c, size_t n) 用於將一段記憶體區域設置為指定的值。 memset() 函數將指定的值 c 複製到 str 所指向的記憶體區域的前 n 個位元組中,這可以用於將記憶體塊清零或設置為特定值。 在一些情況下,需 ...
memset()
描述
C 庫函數 void *memset(void *str, int c, size_t n) 用於將一段記憶體區域設置為指定的值。
memset() 函數將指定的值 c 複製到 str 所指向的記憶體區域的前 n 個位元組中,這可以用於將記憶體塊清零或設置為特定值。
在一些情況下,需要快速初始化大塊記憶體為零或者特定值,memset() 可以提供高效的實現。
在清空記憶體區域或者為記憶體區域賦值時,memset() 是一個常用的工具函數。
聲明
void *memset(void *ptr, int value, size_t num);
下麵是 memset() 函數的聲明。
void *memset(void *str, int c, size_t n)
參數
- str -- 指向要填充的記憶體區域的指針。
- c -- 要設置的值,通常是一個無符號字元。
- n -- 要被設置為該值的位元組數。
返回值
該值返回一個指向存儲區 str 的指針。
註意事項
memset()
並不對指針ptr
指向的記憶體區域做邊界檢查,因此使用時需要確保ptr
指向的記憶體區域足夠大,避免發生越界訪問。memset()
的第二個參數value
通常是一個int
類型的值,但實際上只使用了該值的低8位。這意味著在範圍0
到255
之外的其他值可能會產生未定義的行為。num
參數表示要設置的位元組數,通常是通過sizeof()
或其他手段計算得到的。
模擬實現
void* my_memset(void* ptr, int value, size_t num)
{
assert(ptr);
void* ret = ptr;
//迴圈逐位元組拷貝
while (num--)
{
*(char*)ptr = (char)value;
++(char*)ptr;
}
return ret;
}
本文來自博客園,作者:HJfjfK,原文鏈接:https://www.cnblogs.com/DSCL-ing/p/18342323