1. 程式人生 > >C語言的fgets 與 gets

C語言的fgets 與 gets

               

今天在翻《C語言參考手冊》檢視檔案操作的相關函式時,看到fgets() 與 gets()的一些“微妙”的地方

另外《C語言參考手冊》是C程式設計師身邊的一本非常好的“詞典”,剛開始學習C的時候,或許用不上這書(只因為初學者對裡面的內容看得不是很明白)但是覺得自己學到有一定程度的時候,這本書絕對是一本十分好的工具書!

題外話就到此為止,入正題:

這篇文章主要簡單地說說 fgets() 和 gets()

首先看看函式原型:

char* fgets(char *s, int n, FILE *stream);char* gets(char *s);
一般使用fgets函式,都是讀取檔案當中的n-1個字元到s中,其實,此函式還有一個很好的用處就是從標準輸入流中讀取字串,而且不用擔心輸入的字元個數超出了字元陣列的大小而導致溢位的問題!
要怎樣做呢?如下:
char    str[10];fgets(str, siezof(str), stdin);

而如果使用gets函式的話,就不能保證上述的問題不會出現(輸入的字元個數超出了字元陣列的大小而導致溢位)  不信你可以執行下面的程式碼:

char    str[10];gets(str);
當然你得輸入10個以上的字元才能看到問題

到這裡,fgets()的好處就不用再詳細說了。值得注意的是:謹記fgets()只讀取n-1個字元所以,fgets()讀取到換行符、檔案尾或讀完n-1個字元便會進行返回