日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C中的危险函数(缓冲区溢出)

發布時間:2024/4/19 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C中的危险函数(缓冲区溢出) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

導言

C語言,自創始以來,到現在經久不衰。雖然C你只好自己造輪子,由于C語言允許直接訪問物理地址,可以直接對硬件進行操作,因此它既具有高級語言的功能,又具有低級語言的特性。所以有可移植的匯編之稱。
可是也在這些直接對內存的訪問,導致了危險的發生。

有了自由也就多了混亂 ————某斯基

那些危險的函數們

gets()

第一位公共敵人就是是 gets(),永遠不要使用 gets()。該函數從標準輸入讀入用戶輸入的一行文本,它在遇到 EOF 字符或換行字符之前,不會停止讀入文本。也就是:gets() 根本不執行邊界檢查。因此,使用 gets() 總是有可能使任何緩沖區溢出。
如以下代碼:

char *p = (char *) malloc(8);gets(p);printf("%s",p);free(p);return 0;

效果如下

可見,gets()這個函數可以在不經意間溢出任何的緩沖區0.0
所以,還是老話:永遠不要使用 gets()!
那么怎么辦呢?可以用fget()來代替啊~
參數如下

fgets(buf, BUFSIZE, stdin);

這個用處和gets()一樣,只是額外加入了限制接收長度的參數;

strcpy&strcat

strcpy()函數將源字符串復制到緩沖區。沒有指定要復制字符的具體數目。復制字符的數目直接取決于源字符串中的數目。如果源字符串碰巧來自用戶輸入,且沒有專門限制其大小,則有可能會陷入大的麻煩中!
strcat()它可以將一個字符串合并到緩沖區末尾。同樣的其連接的字符串的大小一樣如此。
所以推薦使用的是strncpy()和strncat(),雖然帶了其他參數可能顯得麻煩,可是某些情況下可以減少那些意想不到的Bug~

結語

緩沖區溢出的問題,廣泛存在,先有個大概認識吧=.=

總結

以上是生活随笔為你收集整理的C中的危险函数(缓冲区溢出)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。