標籤:讀取字串 scanf gets
對於編程初學者很多人對gets和scanf都沒做過深入的瞭解,本文為大家詳細說明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的情況,要用ferror或feof函數檢查是發生錯誤還是遇到EOF。 6、注意:本函數可以無限讀取,不會判斷上限,所以程式員應該確保buffer的空間足夠大,以便在執行讀操作時不發生溢出。如果溢出,多出來的字元將被寫入到堆棧中,這就覆蓋了堆棧原先的內容,破壞一個或多個不相關變數的值,為了避免這種情況,我們可以用fgets()來替換gets()。這個事實導致gets函數只適用於玩具程式。在V7的手冊(1979年)中說明:為了向後相容,gets刪除分行符號,gets並不將分行符號存入緩衝區。
scanf
1、函數:scanf(字元指標) 2、標頭檔:stdio.h(c中),c++不需包含此標頭檔 3、原型:
int scanf(const char *format,...);
4、功能:從stdin流中讀取字串,直至接受到空白符、分行符號或EOF時停止,並將讀取的結果存放在format指標所指向的字元數組中。注意:(空白符、分行符號不作為讀取串的內容,讀取(接受)的分行符號被轉換為null值,並由此來結束字串。) 5、返回值:scanf()函數返回成功賦值的資料項目數,讀到檔案末尾出錯時則返回EOF。 和scanf("%s:",&s)的比較
1.不同點:
scanf不能接受空格、定位字元Tab、斷行符號等;
而gets能夠接受空格、定位字元Tab和斷行符號等;
2.相同點:
字串接受結束後自動加‘\0‘。
使用scanf("%s",&s);函數輸入字串時存在一個問題,就是如果輸入了空格會認為字串結束,空格後的字元將作為下一個輸入項處理,但gets()函數將接收輸入的整個字串直到遇到換行為止
如有錯誤與遺漏,請跟帖指正,謝謝!