gets 函式詳解和缺陷

2022-09-08 10:57:10 字數 642 閱讀 2766

原型:

char *gets( char *buffer);

功能:

gets函式從標準輸入中讀取一行文字,並儲存於作為引數傳遞給它的陣列中。一行文字由一串字元組成,以乙個換行符('\n')結尾。在返回之前,gets函式丟棄換行符('\n'),取而代之的是以'\0'結尾。

返回值:

讀取成功,函式返回與buffer相同的指標。讀入過程中遇到eof或發生錯誤,函式返回null指標。當返回值為null指標時可以用feof()和ferror()來判斷函式是遇到eof還是發生錯誤。

例如:

char str[10];

if( gets(str)!= null )//danger!

gets函式沒有限制它所讀取長度,程式設計師應該保證buffer有足夠的空間,否則buffer可能無法容納gets所讀取的內容,從而導致堆疊溢位。

如果溢位,多出來的字元將被寫入到堆疊

中,這就

覆蓋了堆疊原先的內容

,破壞乙個或多個不相關變數

的值。圖1 溢位提示

為了安全起見,可以使用gets_s函式。

gets函式,C語言gets函式詳解

在前面從鍵盤輸入字串是使用 scanf 和 s。其實還有更簡單的方法,即使用 gets 函式。該函式的原型為 include char gets char str 這個函式很簡單,只有乙個引數。引數型別為 char 型,即 str 可以是乙個字元指標變數名,也可以是乙個字元陣列名。gets 函式的功...

C語言gets 和get s 函式

介紹 gets 可以無限讀取,易發生溢位。如果溢位,多出來的字元將被寫入到堆疊中,這就覆蓋了堆疊原先的內容,破壞乙個或多個不相關變數的值,由於可以無限讀取,所以在2011年12月,ansi 採納了 iso iec 9899 2011 標準,標準中刪除了 gets 函式,使用乙個新的更安全的函式get...

fgets函式和gets函式

請找出下面 裡的問題 includeint main void 答 先看看fgets 和gets 的函式原型 char fgets char s,int n,file stream char gets char s 一般使用 fgets 都是讀取 檔案或者緩衝區 當中的n 1個 字元到s 中,其實,...