導語:gets從標準輸入設備讀字符串函數(shù),其可以無限讀取,不會判斷上限,以回車結(jié)束讀取,所以程序員應該確保buffer的空間足夠大,以便在執(zhí)行讀操作時不發(fā)生溢出。。下面是C語言中gets()函數(shù)知識,一起來學習下吧:

  gets()函數(shù)用于從緩沖區(qū)中讀取字符串,其原型如下:

  char *gets(char *string);

  gets()函數(shù)從流中讀取字符串,直到出現(xiàn)換行符或讀到文件尾為止,最后加上NULL作為字符串結(jié)束。所讀取的字符串暫存在給定的參數(shù)string中。

  【返回值】若成功則返回string的指針,否則返回NULL。

  注意:由于gets()不檢查字符串string的大小,必須遇到換行符或文件結(jié)尾才會結(jié)束輸入,因此容易造成緩存溢出的安全性問題,導致程序崩潰,可以使用fgets()代替。

  【實例】請看下面一個簡單的例子。

  #include

  int main(void)

  {

  char str[10];

  printf("Input a string.");

  gets(str);

  printf("The string you input is: %s",str); //輸出所有的值,注意a

  }

  如果輸入123456(長度小于10),則輸出結(jié)果為:

  Input a string.

  123456↙

  The string you input is:123456

  如果輸入12345678901234567890(長度大于10),則輸出結(jié)果為:

  Input a string.

  12345678901234567890↙

  The string you input is:12345678901234567890

  同時看到系統(tǒng)提示程序已經(jīng)崩潰。

  如果不能正確使用gets()函數(shù),帶來的危害是很大的,就如上面我們看到的,輸入字符串的長度大于緩沖區(qū)長度時,并沒有截斷,原樣輸出了讀入的字符串,造成程序崩潰。

  考慮到程序安全性和健壯性,建議用fgets()來代替gets()。

  如果你在GCC中使用gets(),編譯無法通過,會提示:

  the 'gets' function is dangerous and shout not be used.

1.《gets函數(shù) C語言中gets函數(shù)知識》援引自互聯(lián)網(wǎng),旨在傳遞更多網(wǎng)絡信息知識,僅代表作者本人觀點,與本網(wǎng)站無關,侵刪請聯(lián)系頁腳下方聯(lián)系方式。

2.《gets函數(shù) C語言中gets函數(shù)知識》僅供讀者參考,本網(wǎng)站未對該內(nèi)容進行證實,對其原創(chuàng)性、真實性、完整性、及時性不作任何保證。

3.文章轉(zhuǎn)載時請保留本站內(nèi)容來源地址,http://f99ss.com/jiaoyu/76839.html