linux 下gets函式編譯出錯問題

2021-09-01 11:59:32 字數 792 閱讀 4439

main.c:29:

5: warning: implicit declaration

offunction

『gets』 [-wimplicit-

function

-declaration] gets(

buffer

);

warning: the `gets'

function is dangerous and should not be used.

問題出在程式中使用了 gets是非常不安全的

這是對程式產生bug,出現不可靠性的乙個描述,有些函式在某些意外情況會導致程式陷入不可控狀態,僅僅是pc上執行最多也就是退出而已,但是如果是執行在飛機等系統裡的話,就會有**煩,說危險也不為過。因為英文文獻裡描述為dangerous,所以也就翻譯為危險。

函式執行需要乙個棧空間,但這個棧空間容量是有限的,而且棧裡存放了函式返回的位址。gets()函式在獲取輸入時,如果無限輸入會造成棧空間溢位,在程式返回時,不能正常的找到返回位址,程式將發生不可**行為

解決辦法是使用 fgets 

fgets()函式的基本用法為:

fgets(

char

* s,

intsize,file * stream);

//eg:可以用fgets(tempstr,10,stdin)//tempstr 為char變數,10為要輸入的字串長度,stdin為從標準終端輸入。

​​​​​​​/*   **實現     */

#include

intmain ( )

Linux下gets函式警告

由於linux下的gcc編譯器不支援gets函式,程式編譯過後會出現乙個警告,即 warning the gets function is dangerous and should not be used.此時,可以用fgets函式代替,函式在標頭檔案stdio.h中,函式原型 char fgets...

解決Linux下gets函式警告

由於linux下沒有gets函式,所以提示函式警告 用fgets代替就行了。函式算在標頭檔案 include 函式原型 int fgetc file stream char fgets char s,int size,file stream int getc file stream int getc...

VC 下編譯出極小的程式

昨天做了個telnet後門程式玩,既然是後門嘛,自然是越小越好.可是我的vc9編譯乙個helloworld都有50k 動態鏈結到msvcrt90.dll倒是小下來了,但是得背上乙個更 的dll 600多k 而這個msvcrt90.dll就是我的vista sp1也不是自帶的.更不便於程式的部署.最後...