真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

c語(yǔ)言中的函數(shù)gets,C語(yǔ)言中的函數(shù)返回值的類型是由決定

gets在c語(yǔ)言中是什么意思?

gets從標(biāo)準(zhǔn)輸入設(shè)備讀字符串函數(shù),其可以無(wú)限讀取,不會(huì)判斷上限,以回車結(jié)束讀取,所以程序員應(yīng)該確保buffer的空間足夠大,以便在執(zhí)行讀操作時(shí)不發(fā)生溢出。

成都創(chuàng)新互聯(lián)10多年成都定制網(wǎng)頁(yè)設(shè)計(jì)服務(wù);為您提供網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)頁(yè)設(shè)計(jì)及高端網(wǎng)站定制服務(wù),成都定制網(wǎng)頁(yè)設(shè)計(jì)及推廣,對(duì)成都自上料攪拌車等多個(gè)方面擁有多年的網(wǎng)站設(shè)計(jì)經(jīng)驗(yàn)的網(wǎng)站建設(shè)公司。

注意

因?yàn)楸竞瘮?shù)可以無(wú)限讀取,易發(fā)生溢出。如果溢出,多出來(lái)的字符將被寫入到堆棧中,這就覆蓋了堆棧原先的內(nèi)容,破壞一個(gè)或多個(gè)不相關(guān)變量的值。

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

C語(yǔ)言中g(shù)ets()函數(shù)和getchar()函數(shù)什么區(qū)別 ?在這個(gè)程序段中,有什么用?

區(qū)別:

1、gets讀一行,getchar()讀一個(gè)字符。

函數(shù)原型:

char

*

gets(char

*

ptr);

int

getchar(void);

2、函數(shù)用法:

1)gets()用于從標(biāo)準(zhǔn)輸入流stdin讀入一個(gè)整行(以'\n'或EOF)結(jié)束,寫入ptr指向的字符數(shù)組,并返回這個(gè)指針;出錯(cuò)或遇到文件結(jié)束時(shí)則返回NULL。行末的'\n'從流中取出,但不寫入數(shù)組。gets()不檢查被寫入的數(shù)組大小。

2)getchar()用于從標(biāo)準(zhǔn)輸入流stdin讀入一個(gè)字符,并返回這個(gè)字符。如果讀到文件結(jié)尾,則返回EOF。注意到EOF不能用char類型表示,所以getchar()函數(shù)返回的是一個(gè)int型的數(shù)。使用時(shí)也應(yīng)該注意這一點(diǎn)。

這個(gè)函數(shù)中的作用:

這個(gè)程序在輸入name[i]前,用getchar()把之前scanf("%d",num[i]);中,輸入整數(shù)后按的回車鍵給讀走,否則這個(gè)回車鍵會(huì)導(dǎo)致gets直接讀到一個(gè)空字符串。

c語(yǔ)言gets是什么意思

gets從標(biāo)準(zhǔn)輸入設(shè)備讀字符串函數(shù),其可以無(wú)限讀取,不會(huì)判斷上限,以回車結(jié)束讀取,所以程序員應(yīng)該確保buffer的空間足夠大,以便在執(zhí)行讀操作時(shí)不發(fā)生溢出。

從stdio流中讀取字符串,直至接受到換行符或EOF時(shí)停止,并將讀取的結(jié)果存放在buffer指針?biāo)赶虻淖址麛?shù)組中。換行符不作為讀取串的內(nèi)容,讀取的換行符被轉(zhuǎn)換為‘\0’空字符,并由此來(lái)結(jié)束字符串。

返回值編輯

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

注意

本函數(shù)可以無(wú)限讀取,不會(huì)判斷上限,所以程序員應(yīng)該確保buffer的空間足夠大,以便在執(zhí)行讀操作時(shí)不發(fā)生溢出。如果溢出,多出來(lái)的字符將被寫入到堆棧中,這就覆蓋了堆棧原先的內(nèi)容,破壞一個(gè)或多個(gè)不相關(guān)變量的值。這個(gè)事實(shí)導(dǎo)致gets函數(shù)只適用于玩具程序,為了避免這種情況,我們可以用fgets(stdin) (fgets實(shí)際上可以讀取標(biāo)準(zhǔn)輸入(即大多數(shù)情況下的鍵盤輸入),具體參閱fgets詞條)來(lái)替換gets()。在V7的手冊(cè)(1979年)中說(shuō)明:為了向后兼容,gets刪除換行符,gets并不將換行符存入緩沖區(qū)。

由于可以無(wú)限讀取,所以在2011年12月,ANSI 采納了 ISO/IEC 9899:2011 標(biāo)準(zhǔn),標(biāo)準(zhǔn)中刪除了 gets()函數(shù),使用一個(gè)新的更安全的函數(shù)gets_s()替代(具體用法看下面示例)。

#include stdio.h //這個(gè)頭文件包含gets()函數(shù),這個(gè)函數(shù)在ISO/IEC 9899 2011(C11)標(biāo)準(zhǔn)中被移除

int main(void)

{

char str1[5]; //不要char*p,然后gets(p),這是錯(cuò)誤的,因?yàn)閜沒(méi)有指向有效的內(nèi)存,它可能指向任何非法地址 // 地方的未知大小的內(nèi)存塊,這樣以來(lái),就可能修改了不屬于本程序的內(nèi)存的內(nèi)容

gets(str1);

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

return 0;

}

#include stdio.h//gets_s()用法

#define CH 20

int main(void)

{

char ch[CH];

printf("請(qǐng)輸入你的名字:\n");

gets_s(ch,CH); //這里不能用gets_s(ch);

printf("這是你的名字:%s\n", ch);

return 0;

}

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

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

# include stdio.h

char *gets(char *str);

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

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

# include stdio.h

int main(void)

{

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

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

gets(str);

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

return 0;

}

輸出結(jié)果是:

請(qǐng)輸入字符串:i love you

i love you

擴(kuò)展資料:

從stdin流中讀取字符串,直至接受到換行符或EOF時(shí)停止,并將讀取的結(jié)果存放在buffer指針?biāo)赶虻淖址麛?shù)組中。換行符不作為讀取串的內(nèi)容,讀取的換行符被轉(zhuǎn)換為‘\0’空字符,并由此來(lái)結(jié)束字符串。

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

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

參考資料來(lái)源:百度百科-gets


網(wǎng)站欄目:c語(yǔ)言中的函數(shù)gets,C語(yǔ)言中的函數(shù)返回值的類型是由決定
文章位置:http://weahome.cn/article/hdecsc.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部