c語言gets函數(shù)參數(shù),c gets函數(shù)

c語言gets函數(shù)

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

創(chuàng)新互聯(lián)是一家專注于網(wǎng)站設計、做網(wǎng)站與策劃設計,和縣網(wǎng)站建設哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設10多年,網(wǎng)設計領域的專業(yè)建站公司;建站業(yè)務涵蓋:和縣等地區(qū)。和縣做網(wǎng)站價格咨詢:18982081108

char *gets(char *string);

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

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

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

擴展資料:

功能

從stdio流中讀取字符串,直至接受到換行符或EOF時停止,并將讀取的結(jié)果存放在buffer指針所指向的字符數(shù)組中。換行符不作為讀取串的內(nèi)容,讀取的換行符被轉(zhuǎn)換為‘\0’空字符,并由此來結(jié)束字符串。

返回值

讀入成功,返回與參數(shù)buffer相同的指針;讀入過程中遇到EOF(End-of-File)或發(fā)生錯誤,返回NULL指針。所以在遇到返回值為NULL的情況,要用ferror或feof函數(shù)檢查是發(fā)生錯誤還是遇到EOF。

注意

本函數(shù)可以無限讀取,不會判斷上限,所以程序員應該確保buffer的空間足夠大,以便在執(zhí)行讀操作時不發(fā)生溢出。如果溢出,多出來的字符將被寫入到堆棧中,這就覆蓋了堆棧原先的內(nèi)容,破壞一個或多個不相關變量的值。

這個事實導致gets函數(shù)只適用于玩具程序,為了避免這種情況,我們可以用fgets(stdin) (fgets實際上可以讀取標準輸入(即大多數(shù)情況下的鍵盤輸入),具體參閱fgets詞條)來替換gets()。在V7的手冊(1979年)中說明:為了向后兼容,gets刪除換行符,gets并不將換行符存入緩沖區(qū)。

參考資料:百度百科-gets

c語言,gets函數(shù)的詳細用法?

c語言,gets()函數(shù)用來從標準輸入設備(鍵盤)讀取字符串直到換行符結(jié)束,但換行符會被丟棄,然后在末尾添加'\0'字符。其調(diào)用格式為:gets(s)。其中s為字符串變量(字符串數(shù)組名或字符串指針)。如果為單個字符指針,編譯連接不會有錯誤,但運行后內(nèi)存溢出錯誤。

擴展資料:

gets(s)函數(shù)與scanf("%s",s)相似,但不完全相同,使用scanf("%s",s) 函數(shù)輸入字符串時存在一個問題,就是如果輸入了空格會認為字符串結(jié)束,空格后的字符將作為下一個輸入項處理,但gets()函數(shù)將接收輸入的整個字符串直到遇到換行為止。

gets(s)函數(shù)可以無限讀取,不會判斷上限,以回車結(jié)束讀取,所以程序員應該確保buffer的空間足夠大,以便在執(zhí)行讀操作時不發(fā)生溢出。

C語言里的gets()函數(shù)

對的,確實有舉出漏洞。以下是個人建議,希望對樓主有所幫助。

首先我們應該先認識一下gets和scanf的語法解構(gòu)。如果要給一個字符串賦值,那我們可以這樣做。

int

a[10];

gets(a);

或是

for(i=0;i10;i++)

scanf("%d",a[i]);

由上我們可以看出,scanf每次只能輸入一個字符,然后回車,繼續(xù)循環(huán)。

而gets呢,需要把所有的字符串都輸入完后回車結(jié)束。這就造成了一個問題。

如果我們輸入的字符串多于10個單位呢?我們輸入的“a[20]”個空間的字符。

這就可能會產(chǎn)生溢出漏洞。

僅代表個人建議,希望對樓主有所幫助。

c語言gets()的用法是什么?

在前面從鍵盤輸入字符串是使用 scanf 和 %s。其實還有更簡單的方法,即使用 gets() 函數(shù)。該函數(shù)的原型為:

# include stdio.h

char *gets(char *str);

這個函數(shù)很簡單,只有一個參數(shù)。參數(shù)類型為 char* 型,即 str 可以是一個字符指針變量名,也可以是一個字符數(shù)組名。gets() 函數(shù)的功能是從輸入緩沖區(qū)中讀取一個字符串存儲到字符指針變量 str 所指向的內(nèi)存空間。

下面將前面中使用 scanf 輸入字符串的程序改一下:

# include stdio.h

int main(void)

{

char str[20] = "\0";? //字符數(shù)組初始化\0

printf("請輸入字符串:");

gets(str);

printf("%s\n", str);

return 0;

}

輸出結(jié)果是:

請輸入字符串:i love you

i love you

擴展資料:

從stdin流中讀取字符串,直至接受到換行符或EOF時停止,并將讀取的結(jié)果存放在buffer指針所指向的字符數(shù)組中。換行符不作為讀取串的內(nèi)容,讀取的換行符被轉(zhuǎn)換為‘\0’空字符,并由此來結(jié)束字符串。

讀入成功,返回與參數(shù)buffer相同的指針;

讀入過程中遇到EOF(End-of-File)或發(fā)生錯誤,返回NULL指針。所以在遇到返回值為NULL的情況,要用ferror或feof函數(shù)檢查是發(fā)生錯誤還是遇到EOF。

參考資料來源:百度百科-gets

網(wǎng)頁標題:c語言gets函數(shù)參數(shù),c gets函數(shù)
URL鏈接:http://muchs.cn/article48/hcjehp.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作、虛擬主機標簽優(yōu)化、App設計、Google、網(wǎng)站改版

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應式網(wǎng)站建設