乙個memset函式的誤區

2021-10-02 21:38:39 字數 1168 閱讀 1996

今天在對尤拉篩這個演算法練習的時候,發現了一直沒有對memset的初始化的誤區,在對乙個尤拉篩的板子的**找bug,卻一直找不出來。

原始錯誤**

#include

#include

int a[

1000005];

int prin[

1000000];

void

prinme()

//素數打表}}

intmain()

printf

("%d\n"

,cnt)

;return0;

}

發現錯誤

按道理來說輸出的值應該為4,但這裡卻是0,所以將陣列a[0]–a[8]的值一一打出來,如圖:

在這裡發現,memset()對陣列a的初始化沒有起作用,然後將陣列a全部初始化為1,來對這個**進行反向修改,得到了正確答案。

正確**:

#include

#include

int a[

1000005];

int prin[

1000000];

void

prinme()

}}intmain()

printf

("%d\n"

,cnt)

;return0;

}

這樣方可得到正確答案。

memset是計算機中c/c++語言初始化函式。作用是將某一塊記憶體中的內容全部設定為指定的值, 這個函式通常為新申請的記憶體做初始化工作。

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

memset不能將整數陣列初始化為0,-1之外的其他值

memset函式按位元組對記憶體塊進行初始化,所以不能用它將int陣列初始化為0和-1之外的其他值(除非該值高位元組和低位元組相同)。

第一篇部落格,有錯誤請指出。謝謝!

乙個memset函式使用時的坑

平時使用memset函式都是用來初始化字串,從來沒有注意過它具體是怎麼實現的,最近無意中發現原來這個函式裡面還是有坑的。我嘗試用它來初始化整型陣列 int array 10 memset array,1,sizeof a 我原本是想將陣列元素全部初始化為1,可是卻是這樣的 一開始不明白為什麼會這樣,...

font size的乙個誤區

專案中有一處需要顯示乙個小圓點,用的是font awesome的圖示庫,隨手設定了乙個font size 1px,chrome下顯示沒有問題,ie下卻怎麼都顯示不出,開始以為是空span在ie下的bug,按stackoverflow的答案修改了樣式依然不起作用,最後無意間改了一下font size發...

乙個memset引發的血案

前幾天做了一道bst題,提交了幾次都是wa,今天抽空拿了出來仔細瞧瞧總算被我發現禍頭根源.總結原因還在於自己對memset不太了解,以前用對估計也是瞎貓撞見死耗子 memset的介紹 void memset void buffer,int ch,size t count buffer 指向某段記憶體...