gets、scanf

gets

 
  【1】函數:gets(字符指針)
 
  【2】頭文件:stdio.h(c中),c++不需包含此頭文件
 
  【3】原型:char*gets(char*buffer);
 
  【4】功能:從stdin流中讀取字符串,直至接受到換行符或EOF時停止,並將讀取的結果存放在buffer指針所指向的字符數組中。換行符不作爲讀取串的內容,讀取(接受)的換行符被轉換爲null值,並由此來結束字符串。
 
  【5】返回值:讀入成功,返回與參數buffer相同的指針;讀入過程中遇到EOF(End-of-File)或發生錯誤,返回NULL指針。所以在遇到返回值爲NULL的情況,要用ferrorfeof函數檢查是發生錯誤還是遇到EOF。
 
  【6】注意:本函數可以無限讀取,不會判斷上限,所以程序員應該確保buffer的空間足夠大,以便在執行讀操作時不發生溢出。如果溢出,多出來的字符將被寫入到堆棧中,這就覆蓋了堆棧原先的內容,破壞一個或多個不相關變量的值,爲了避免這種情況,我們可以用fgets()來替換gets()。這個事實導致gets函數只適用於玩具程序。在V7的手冊(1979年)中說明:爲了向後兼容,gets刪除換行符,gets並不將換行符存入緩衝區。
 

和scanf("%s:",&s)的比較

1.不同點:

  scanf不能接受空格、製表符Tab、回車等;

  而gets能夠接受空格、製表符Tab和回車等;

2.相同點:

  字符串接受結束後自動加'\0'。

使用scanf("%s",&s);函數輸入字符串時存在一個問題,就是如果輸入了空格會認爲字符串結束,空格後的字符將作爲下一個輸入項處理,但gets()函數將接收輸入的整個字符串直到遇到換行爲止

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章