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的情況,要用
ferror或
feof函數檢查是發生錯誤還是遇到EOF。
【6】注意:本函數可以無限讀取,不會判斷上限,
所以程序員應該確保buffer的空間足夠大,以便在執行讀操作時不發生溢出。如果溢出,多出來的字符將被寫入到堆棧中,這就覆蓋了堆棧原先的內容,破壞一個或多個不相關變量的值,為了避免這種情況,我們可以用fgets()來替換gets()。這個事實導致gets函數只適用於玩具程序。在V7的手冊(1979年)中說明:為了向后兼容,gets刪除換行符,gets並不將換行符存入緩沖區。
和scanf("%s:",&s)的比較
1.不同點:
scanf不能接受空格、制表符Tab、回車等;
而gets能夠接受空格、制表符Tab和回車等;
2.相同點:
字符串接受結束后自動加'\0'。
使用scanf("%s",&s);函數輸入字符串時存在一個問題,就是如果輸入了空格會認為字符串結束,空格后的字符將作為下一個輸入項處理,但gets()函數將接收輸入的整個字符串直到遇到換行為止