當前位置:首頁 » 編程語言 » c語言內存溢出

c語言內存溢出

發布時間: 2024-09-05 10:29:19

1. 在c語言中怎樣使用gets()函數

gets從標准輸入設備讀字元串函數。可以無限讀取,不會判斷上限,以回車結束讀取,所以程序員應該確保buffer的空間足夠大,以便在執行讀操作時不發生溢出。

從stdin流中讀取字元串,直至接受到換行符或EOF時停止,並將讀取的結果存放在buffer指針所指向的字元數組中。換行符不作為讀取串的內容,讀取的換行符被轉換為『』空字元,並由此來結束字元串。

讀入成功,返回與參數buffer相同的指針;讀入過程中遇到EOF(End-of-File)或發生錯誤,返回NULL指針。所以在遇到返回值為NULL的情況,要用ferror或feof函數檢查是發生錯誤還是遇到EOF。

本函數可以無限讀取,不會判斷上限,所以程序員應該確保buffer的空間足夠大,以便在執行讀操作時不發生溢出。如果溢出,多出來的字元將被寫入到堆棧中,這就覆蓋了堆棧原先的內容,破壞一個或多個不相關變數的值。

這個事實導致gets函數只適用於玩具程序,為了避免這種情況,我們可以用fgets(stdin) (fgets實際上可以讀取標准輸入(即大多數情況下的鍵盤輸入),具體參閱fgets詞條)來替換gets()。為了向後兼容,gets刪除換行符,gets並不將換行符存入緩沖區。

(1)c語言內存溢出擴展閱讀:

gets()函數用來從標准輸入設備(鍵盤)讀取字元串直到換行符結束,但換行符會被丟棄,然後在末尾添加''字元。其調用格式為:gets(s);其中s為字元串變數(字元串數組名或字元串指針)。

gets(s)函數與scanf("%s",s)相似,但不完全相同,使用scanf("%s",s) 函數輸入字元串時存在一個問題,就是如果輸入了空格會認為字元串結束,空格後的字元將作為下一個輸入項處理,但gets()函數將接收輸入的整個字元串直到遇到換行為止。

gets(s) 函數中的變數s為一字元串指針。如果為單個字元指針,編譯連接不會有錯誤,但運行後內存溢出錯誤。

熱點內容
安卓開發選哪個版本的SDK 發布:2025-07-02 22:19:07 瀏覽:486
未上傳圖片 發布:2025-07-02 22:14:01 瀏覽:599
安卓qq直播怎麼分享聲音 發布:2025-07-02 22:13:21 瀏覽:250
安卓系統怎麼刷機清除內存 發布:2025-07-02 22:08:19 瀏覽:697
安卓手機6位數密碼有多少組 發布:2025-07-02 21:50:31 瀏覽:798
存儲卡視頻多了 發布:2025-07-02 21:49:40 瀏覽:851
ajax無刷新上傳圖片 發布:2025-07-02 21:32:56 瀏覽:118
編譯器不認pow函數 發布:2025-07-02 21:27:04 瀏覽:339
w10隱藏文件夾 發布:2025-07-02 21:27:03 瀏覽:534
電腦d盤拒絕訪問 發布:2025-07-02 21:27:02 瀏覽:779