常用函式 百科之memset

2021-07-05 11:32:19 字數 1113 閱讀 1155

連線:

第二我也有陰影,第三個我也入過坑

一、函式介紹

void *memset(void *s, int ch, size_t n);

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

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

二、常見錯誤

第一: 搞反了 ch 和 n 的位置.

一定要記住如果要把乙個char a[20]清零,一定是 memset(a,0,20*sizeof(char)); 而不是 memset(a,20*sizeof(char),0);

第二: 過度使用memset,我想這些程式設計師可能有某種心理陰影,他們懼怕未經初始化的記憶體,所以他們會寫出這樣的**:

char buffer[4];

memset(buffer,0,sizeof(char)*4);

strcpy(buffer,"123");

//"123"中最後隱藏的'\0'佔一位,總長4位。

這裡的memset是多餘的. 因為這塊記憶體馬上就被全部覆蓋,清零沒有意義.

另:以下情況並不多餘,因某些編譯器分配空間時,記憶體中預設值並不為0:

char buffer[20];

memset(buffer,0,sizeof(char)*20);

memcpy(buffer,"123",3);

//這一條的memset並不多餘,memcpy並沒把buffer全部覆蓋,如果沒有memset,

//用printf列印buffer會有亂碼甚至會出現段錯誤。

//如果此處是strcpy(buffer,"123");便不用memset,

//strcpy雖然不會覆蓋buffer但是會拷貝字串結束符

第三: 其實這個錯誤嚴格來講不能算用錯memset,但是它經常在使用memset的場合出現

int some_func(struct something *a)

這裡錯誤的原因是vc函式傳參過程中的指標降級,導致sizeof(a),返回的是乙個something*指標型別大小的的位元組數,如果是32位,就是4位元組。

PALM Kdic,Zdic之維基百科簡易製作教程

大家都知道,維基有大半年沒更新了 引用 選有這句話的bz2檔案下就好 3,用ultraedit或者類似的編輯器開啟分段後的檔案,將其斷開處的條目整合。和要匹配。不管是整合到上乙個檔案還是下乙個檔案,匹配就行。4,用tompdarandax做的轉換程式將檔案分開的幾個xml檔案轉換成kdic格式的tx...

python爬蟲之嗅事百科笑話

基礎爬蟲參考 建議閱讀這個,寫的很清晰易懂 說明文件 直接執行,會將嗅事百科第1頁到第20頁的笑話內容爬下來 例如 嗅事百科有很多笑話,這裡我沒有處理 coding utf 8 from scrapy import selector import urllib2 import sys from ti...

Python爬蟲入門學習例子之糗事百科

初學python爬蟲,學習資料是這篇部落格 python爬蟲入門教程 下面列出乙個爬糗事百科的例子鞏固一下。程式 糗百爬蟲 語言 python 2.7 功能 按下回車依次瀏覽今日的糗百熱點 import urllib2,re,time,thread class spider model 類初始化 d...