連線:
第二我也有陰影,第三個我也入過坑
一、函式介紹
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...