在前面從鍵盤輸入字串是使用 scanf 和 %s。其實還有更簡單的方法,即使用 gets() 函式。該函式的原型為:
# include char *gets(char *str);
這個函式很簡單,只有乙個引數。引數型別為 char* 型,即 str 可以是乙個字元指標變數名,也可以是乙個字元陣列名。
gets() 函式的功能是從輸入緩衝區中讀取乙個字串儲存到字元指標變數 str 所指向的記憶體空間。
下面將前面中使用 scanf 輸入字串的程式改一下:
# include int main(void)
輸出結果是:
請輸入字串:i love you
i love you
可見,gets() 函式不僅比 scanf 簡潔,而且,就算輸入的字串中有空格也可以直接輸入,不用像 scanf 那樣要定義多個字元陣列。也就是說:
# include int main(void)
輸出結果是:
請輸入字串:hi i...like you
hi i...like you
此外,關於使用 gets() 函式需要注意:使用 gets() 時,系統會將最後「敲」的換行符從緩衝區中取出來,然後丟棄,所以緩衝區中不會遺留換行符。這就意味著,如果前面使用過 gets(),而後面又要從鍵盤給字元變數賦值的話就不需要吸收回車清空緩衝區了,因為緩衝區的回車已經被 gets() 取出來扔掉了。下面寫乙個程式驗證一下:
# include int main(void)
輸出結果是:
請輸入字串:i love you
i love you
ych = y
我們看到,沒有清空緩衝區照樣可以輸入'y',因為 gets() 已經將緩衝區中的回車取出來丟掉了。如果前面使用的不是 gets() 而是 scanf,那麼通過鍵盤給 ch 賦值前就必須先使用 getchar() 清空緩衝區。
C語言gets 和get s 函式
介紹 gets 可以無限讀取,易發生溢位。如果溢位,多出來的字元將被寫入到堆疊中,這就覆蓋了堆疊原先的內容,破壞乙個或多個不相關變數的值,由於可以無限讀取,所以在2011年12月,ansi 採納了 iso iec 9899 2011 標準,標準中刪除了 gets 函式,使用乙個新的更安全的函式get...
C語言 gets函式
字串簡介 i am a liitle cat 字串通常以字元陣列的形式儲存在計算機中,並且以 0作為字串結束的標誌 通常用來告知計算機內部是字串形式 與 有所不同 例如 m 是以char 型別基礎變數儲存在計算機中,而 m 是以字元陣列的形式儲存在計算機中 字串輸入函式gets gets 函式從標準...
C語言 gets函式
gets函式原型 char gets char str 功能 從stdio流中讀取字串直到遇到換行符或者eof時停止,並將讀取的結果存放在str指標所指字元陣列中換行符不作為讀取內容 讀取的換行符被轉換為null值 並由此結束字元 即 gets函式用來從標準輸入裝置讀取字串直到遇到回車,但是回車不屬...