gets函數都是以什麼結束的?C語言面試經常會考如下一道題,哪裡有錯誤:,我來為大家科普一下關于gets函數都是以什麼結束的?以下内容希望對你有幫助!
C語言面試經常會考如下一道題,哪裡有錯誤:
#include <stdio.h> int main() { char string[100] = {'\0'}; gets(string); printf("輸入的字符串是:%s \n", string); return 0; }
這段C程序可能有問題,問題就在于函數gets()的使用。
gets從标準輸入設備讀字符串函數,可以無限讀取,不會判斷上限,以回車結束讀取。所以如果輸入的字符串超過100個,它也不會做檢測,此時就會發生溢出。
可以使用fgets函數來從文件中讀取字符串。fgtes函數原型是
char *fgets(char *buf, int bufsize, FILE *stream);
一般的教材都會對這個函數的用法作出解釋,這裡就不在詳述了,以下文字摘用百度百科的解釋:百度百科對fgets的解釋
從文件結構體指針stream中讀取數據,每次讀取一行。讀取的數據保存在buf指向的字符數組中,每次最多讀取bufsize-1個字符(第bufsize個字符賦'\0'),如果文件中的該行,不足bufsize個字符,則讀完該行就結束。如若該行(包括最後一個換行符)的字符數超過bufsize-1,則fgets隻返回一個不完整的行,但是,緩沖區總是以NULL字符結尾,對fgets的下一次調用會繼續讀該行。函數成功将返回buf,失敗或讀到文件結尾返回NULL。因此我們不能直接通過fgets的返回值來判斷函數是否是出錯而終止的,應該借助feof函數或者ferror函數來判斷。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!