gets函數(shù)是以換行符或者EOF為結(jié)束標(biāo)志,如果用空格或者跳格,gets函數(shù)會(huì)繼續(xù)等待用戶(hù)輸入。
成都創(chuàng)新互聯(lián)專(zhuān)注于企業(yè)營(yíng)銷(xiāo)型網(wǎng)站、網(wǎng)站重做改版、榆林網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5建站、商城網(wǎng)站開(kāi)發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性?xún)r(jià)比高,為榆林等各大城市提供網(wǎng)站開(kāi)發(fā)制作服務(wù)。
1、gets函數(shù):
原型:char * gets(char * buffer);
功能:從stdin流中讀取字符串,直至讀到換行符或EOF時(shí)停止,并將讀取的結(jié)果存放在buffer指針?biāo)赶虻淖址麛?shù)組中。換行符不作為讀取串的內(nèi)容,讀取的換行符被轉(zhuǎn)換為 \0 空字符,并以此結(jié)束字符串;
說(shuō)明:當(dāng)使用unicode寬字符文本時(shí),請(qǐng)使用寬字符版本函數(shù) _getws()。gets函數(shù)可以無(wú)限讀取,不會(huì)判斷上限,所以使用時(shí)應(yīng)確保buffer的空間足夠大,以便在執(zhí)行讀取操作時(shí)不發(fā)生溢出。gets函數(shù)在C11標(biāo)準(zhǔn)中被移除,改為更加安全的gets_s函數(shù);
頭文件:stdio.h;
返回值:若讀入成功,返回與參數(shù)buffer相同的字符指針。若讀入過(guò)程中遇到EOF或發(fā)生錯(cuò)誤,返回NULL指針。所以當(dāng)遇到返回值為NULL的情況時(shí),應(yīng)使用ferror或feof函數(shù)檢查是發(fā)生錯(cuò)誤還是遇到EOF。
2、例程:
#include?stdio.h
int?main(){
char?buffer[5];//定義緩存字符數(shù)組buffer
gets(buffer);//用gets函數(shù)從stdin流中讀入字符串,因?yàn)閎uffer長(zhǎng)度是5,輸入不能超過(guò)4個(gè)字符
printf("%s",buffer);//在stdout流中輸出讀入的字符串
return?0;
}
1、gets() 函數(shù)是從鍵盤(pán)輸入字符串,該函數(shù)只有一個(gè)參數(shù)。參數(shù)類(lèi)型為 char* 型,即 str 可以是一個(gè)字符指針變量名,也可以是一個(gè)字符數(shù)組名。打開(kāi)編輯器,新建一個(gè)c語(yǔ)言文件,引入標(biāo)準(zhǔn)庫(kù)并新建主函數(shù):
2、gets() 函數(shù)的功能是從輸入緩沖區(qū)中讀取一個(gè)字符串存儲(chǔ)到字符指針變量 str 所指向的內(nèi)存空間,這里的程序是用gets函數(shù)輸入字符串,可以看到不像scanf那樣需要使用%號(hào),gets函數(shù)中直接傳入字符串即可:
3、最后運(yùn)行下程序,輸入“i love you”,可以看到gets函數(shù)可以直接輸出空格,而scanf函數(shù)輸出空格則需要使用轉(zhuǎn)義字符實(shí)現(xiàn),因此gets函數(shù)的使用要比scanf簡(jiǎn)潔的多。以上就是gets函數(shù)使用方法的演示:
C語(yǔ)言的gets函數(shù)一般包含在stdio.h頭文件里,如果沒(méi)有包含比頭文件那可能會(huì)有問(wèn)題。第二種情況包含了還出問(wèn)題,說(shuō)明你的編譯器已經(jīng)不支持這個(gè)函數(shù)了,這個(gè)函數(shù)非常不安全,容易造成溢出,建議換成fgets函數(shù)。
函數(shù)原型:
char *fgets(char *buf, int bufsize, FILE *fp);
參數(shù)解釋?zhuān)?/p>
參數(shù)一是輸入字符串存放地址,
參數(shù)二是存放地址最大容量,
參數(shù)三是從哪里輸入,可以從文件也可從輸入設(shè)備,如果從輸入設(shè)備輸入這個(gè)參數(shù)可以寫(xiě)成stdin,如果從文件輸入此參數(shù)為文件指針。
返回值:
輸入成功返回參數(shù)一,失敗返回NULL.
補(bǔ)充知識(shí):
為什么gets不讓用呢,我們可以看它的原型:char *gets(char *buf);
這個(gè)函數(shù)可以一直輸入知道換行或者EOF,它并不考慮buf空間是否足夠大能放下,這就容易導(dǎo)致溢出,有些別有用心的人就會(huì)利用這個(gè)漏洞去攻擊你的程序。
而fgets可以通過(guò)第二參數(shù)保證不會(huì)讀入超過(guò)buf空間的字符。
#includestdio.h
static
char
buff[256];
static
char
*string="abcdef";
int
main()
{
printf("Please
input
a
string:");
gets(buff);//buff
才是用來(lái)存儲(chǔ)字符串的,
string
已經(jīng)指向字符串常量,
而常量是不能被修改的
printf("\nYou
string
is
:
%s\n",buff);//你輸入的字符串在buff數(shù)組中
return
0;
}