C中的危险函数(缓冲区溢出)
導言
C語言,自創始以來,到現在經久不衰。雖然C你只好自己造輪子,由于C語言允許直接訪問物理地址,可以直接對硬件進行操作,因此它既具有高級語言的功能,又具有低級語言的特性。所以有可移植的匯編之稱。
可是也在這些直接對內存的訪問,導致了危險的發生。
有了自由也就多了混亂 ————某斯基
那些危險的函數們
gets()
第一位公共敵人就是是 gets(),永遠不要使用 gets()。該函數從標準輸入讀入用戶輸入的一行文本,它在遇到 EOF 字符或換行字符之前,不會停止讀入文本。也就是:gets() 根本不執行邊界檢查。因此,使用 gets() 總是有可能使任何緩沖區溢出。
如以下代碼:
效果如下
可見,gets()這個函數可以在不經意間溢出任何的緩沖區0.0
所以,還是老話:永遠不要使用 gets()!
那么怎么辦呢?可以用fget()來代替啊~
參數如下
這個用處和gets()一樣,只是額外加入了限制接收長度的參數;
strcpy&strcat
strcpy()函數將源字符串復制到緩沖區。沒有指定要復制字符的具體數目。復制字符的數目直接取決于源字符串中的數目。如果源字符串碰巧來自用戶輸入,且沒有專門限制其大小,則有可能會陷入大的麻煩中!
strcat()它可以將一個字符串合并到緩沖區末尾。同樣的其連接的字符串的大小一樣如此。
所以推薦使用的是strncpy()和strncat(),雖然帶了其他參數可能顯得麻煩,可是某些情況下可以減少那些意想不到的Bug~
結語
緩沖區溢出的問題,廣泛存在,先有個大概認識吧=.=
總結
以上是生活随笔為你收集整理的C中的危险函数(缓冲区溢出)的全部內容,希望文章能夠幫你解決所遇到的問題。