在linux下編譯c檔案時出現:
warning: the `gets' function is dangerous and should not be used
問題在於gets()函式在獲取輸入時,不會對輸入有檢查,如果無限輸入會造成棧空間溢位,在程式返回時,不能正常的找到返回位址,程式將發生不可**行為。
使用fgets()函式。
fgets()函式的基本用法為:
fgets(char * s,int size,file * stream);//eg:可以用fgets(tempstr,10,stdin)//tempstr 為char變數,10為要輸入的字串長度,stdin為從標準終端輸入。
scanf函式的不安全性分析
int scanf char 是其函式宣告。其中只要求第乙個引數是char 即字串即可,而對於其他引數則沒有限制型別和個數,這其中有安全風險。舉個例子 scanf d c i,ch 如果從鍵盤上輸入的資料是 30 a?則變數ch的值是空格字元而不是字元 a 這種錯誤很隱蔽,因此建議讀者盡量不要使用s...
hashmap的執行緒不安全性
首先hashmap在多個執行緒同時對其操作的時候造成的髒讀很統一理解,比如乙個執行緒a對hashmap進行讀操作,乙個執行緒b對hashmap就行寫操作。執行緒b先進入put方法中,此時還沒有寫資料的時候執行緒a輪轉執行,並一直執行到結束,假設執行取到資料為條,這時執行緒b繼續執行新增了一條資料。那...
strncpy的實現與不安全性
原型 char strncpy char dest,char src,size t n 功能 將字串src中最多n個字元複製到字元陣列dest中 它並不像strcpy一樣遇到null就開始複製,而是等湊夠n個字元才開始複製 返回指向dest的指標。說明 如果n dest串長度,dest棧空間溢位產生...