strncpy(dest, src, n);似乎是安全的函式
原型:char *strncpy(char *restrict s1, const char *restrict s2, size_t n);
今天碰到了問題,是由於對strncpy理解不夠造成的
man裡:
事實上s2往往不如n那麼長,於是s1剩餘部分會全填0。今天碰到的問題就是,s1的長度不如n,但是dest指向的n的長度全部被改寫,於是記憶體被越界寫了0,程式掛掉了。
這或許不算strncpy的bug,只是之前設計的函式介面,沒有傳入dest的長度,而使用了定值n在strcpy中,自己的設計問題。
結論:dest一定要和n長度匹配。
記憶體訪問越界
1.記憶體越界分配的原理 何謂記憶體訪問越界,簡單的說,你向系統申請了一塊記憶體,在使用這塊記憶體的時候,超出了你申請的範圍。例如,你明明申請的是100位元組的空間,但是你由於某種原因寫入了120位元組,這就是記憶體訪問越界。記憶體訪問越界的後果是 你的寫入破壞了本不屬於你的空間。如下所示的 輸出 ...
監測記憶體越界
ifndef checkmemoverflow h define checkmemoverflow h define check mem overflow ifdef check mem overflow 作業系統記憶體分配粒度為頁面 4k define page size 4096 define ...
char陣列記憶體越界
在c語言中,將字串作為字元陣列來處理 c 中不是 為了測定字串的實際長度,c語言規定了乙個 字串結束標誌 以字元 0 代表。如果有乙個字串,其中第10個字元為 0 則此字串的有效字元為9個。也就是說,在遇到第乙個字元 0 時,表示字串結束,由它前面的字元組成字串。系統對字串常量也自動加乙個 0 作為...