scanf 和 gets 讀取字符串


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()函數將接收輸入的整個字符串直到遇到換行為止


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM