原型:char * strncpy(char *dest, char *src, size_t n);
功能:將字串src中最多n個字元複製到字元陣列dest中(它並不像strcpy一樣遇到null就開始複製,而是等湊夠n個字元才開始複製),返回指向dest的指標。
說明:
如果n > dest串長度,dest棧空間溢位產生崩潰異常。
否則:
1)src串長度<=dest串長度,(這裡的串長度包含串尾null字元)
如果n=(0, src串長度),src的前n個字元複製到dest中。但是由於沒有null字元,所以直接訪問dest串會發生棧溢位的異常情況。
如果n = src串長度,與strcpy一致。
如果n = dest串長度,[0,src串長度]處存放src字串,(src串長度, dest串長度]處存放null。
2)src串長度》dest串長度
如果n =dest串長度,則dest串沒有null字元,會導致輸出會有亂碼。如果不考慮src串複製完整性,可以將dest最後一字元置為null。
綜上,一般情況下,使用strncpy時,建議將n置為dest串長度(除非你將多個src串都複製到dest陣列,並且從dest尾部反向操作),複製完畢後,為保險起見,將dest串最後一字元置null,避免發生在第2)種情況下的輸出亂碼問題。當然嘍,無論是strcpy還是strncpy,保證src串長度
hashmap的執行緒不安全性
首先hashmap在多個執行緒同時對其操作的時候造成的髒讀很統一理解,比如乙個執行緒a對hashmap進行讀操作,乙個執行緒b對hashmap就行寫操作。執行緒b先進入put方法中,此時還沒有寫資料的時候執行緒a輪轉執行,並一直執行到結束,假設執行取到資料為條,這時執行緒b繼續執行新增了一條資料。那...
gets 函式的不安全性
在linux下編譯c檔案時出現 warning the gets function is dangerous and should not be used問題在於gets 函式在獲取輸入時,不會對輸入有檢查,如果無限輸入會造成棧空間溢位,在程式返回時,不能正常的找到返回位址,程式將發生不可 行為。使...
scanf函式的不安全性分析
int scanf char 是其函式宣告。其中只要求第乙個引數是char 即字串即可,而對於其他引數則沒有限制型別和個數,這其中有安全風險。舉個例子 scanf d c i,ch 如果從鍵盤上輸入的資料是 30 a?則變數ch的值是空格字元而不是字元 a 這種錯誤很隱蔽,因此建議讀者盡量不要使用s...