gets

gets

計算機程序函數
gets函數,可以無限讀取,不會判斷上限,以回車結束讀取,所以程序員應該确保buffer的空間足夠大,以便在執行讀操作時不發生溢出。gets是從stdin流中讀取字符串,直至接受到換行符或EOF時停止,并将讀取的結果存放在buffer指針所指向的字符數組中。換行符不作為讀取串的内容,讀取的換行符被轉換為null值,并由此來結束字符串。gets()是一個過時的函數,在C語言官方手冊中,強烈建議用fgets()取代之。[1]
  • 中文名:gets
  • 外文名:gets
  • 頭文件:stdio.h(c),cstdio(c )
  • 功能:讀取字符串
  • 原型:char * ( char * str );

功能

從stdin流中讀取字符串,直至接受到換行符或EOF時停止,并将讀取的結果存放在buffer指針所指向的字符數組中。換行符不作為讀取串的内容,讀取的換行符被轉換為‘0’空字符,并由此來結束字符串。

返回值

讀入成功,返回與參數buffer相同的指針;

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

注意

因為本函數可以無限讀取,易發生溢出。如果溢出,多出來的字符将被寫入到堆棧中,這就覆蓋了堆棧原先的内容,破壞一個或多個不相關變量的值。這個事實導緻gets函數隻适用于玩具程序,為了避免這種情況,我們可以用fgets(stdin) (fgets實際上可以讀取标準輸入,即大多數情況下的鍵盤輸入),具體參閱fgets詞條)來替換gets()。在V7的手冊(1979年)中說明:為了向後兼容,gets删除換行符,gets并不将換行符存入緩沖區。

由于可以無限讀取,所以在2011年12月,ANSI 采納了 ISO/IEC 9899:2011 标準,标準中删除了 gets()函數,使用一個新的更安全的函數gets_s()替代。

相關示例

C:

C++:

gets()函數用來從标準輸入設備(鍵盤)讀取字符串直到換行符結束,但換行符會被丢棄,然後在末尾添加'0'字符。其調用格式為:

gets(s);

其中s為字符串變量(字符串數組名或字符串指針)。

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

總結:gets()函數讀取到n(我們輸入的回車)于是停止讀取,但是它不會把n包含到字符串裡面去。然而,和它配合使用的puts函數,卻在輸出字符串的時候自動換行。

說明

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

寬字符版本,當使用unicode寬字符文本時,使用這個函數 _getws();

在C11标準中被删除,可用C标準庫中的fgets代替。

上一篇:comfort

下一篇:TLF

相關詞條

相關搜索

其它詞條