3 回答

TA貢獻1851條經驗 獲得超3個贊
fgets函數原型char *fgets(char *buf, int bufsize, FILE *stream);參數*buf: 字符型指針,指向用來存儲所得數據的地址。bufsize: 整型數據,指明存儲數據的大小。*stream: 文件結構體指針,將要讀取的文件流。含義:從文件結構體指針stream中讀取數據,每次讀取一行。讀取的數據保存在buf指向的字符數組中,每次最多讀取bufsize-1個字符(第bufsize個字符賦'\0'),如果文件中的該行,不足bufsize個字符,則讀完該行就結束。如若該行(包括最后一個換行符)的字符數超過bufsize-1,則fgets只返回一個不完整的行,但是,緩沖區總是以NULL字符結尾,對fgets的下一次調用會繼續讀該行。函數成功將返回buf,失敗或讀到文件結尾返回NULL。
----------------------------以上說明,引用百度知道,“修者世界 ”的發言,不是本人編著
下面我對你這個代碼補充說明:
stdin是C語言中標準輸入流,一般用于獲取鍵盤輸入
所以代碼 ret_val = fgets(st, n, stdin); 這里意思:
從鍵盤讀入n位字符+結束'\0’存放到st數組中。
而判斷if (ret_val){。。。。這里的意思:
當鍵盤輸入的字符大于一次讀取緩存空間st時(ret_val 以‘\0’結尾),通過 getchar()截取掉鍵盤緩沖區剩余字符。并返回 ret_val 。
當鍵盤輸入的字符小于一次讀取緩存空間st時(ret_val 以回車‘\n’結尾),
將結尾的'\n'替換成'\0',并返回ret_val 。
所以總結:
char * s_gets(char *st, int n)的意思就是: 傳參數組指針st、數組大小n。返回鍵盤輸入的字符串前n-1個字符。
比如,main函數調用,定義6維度大小的數組
12345678 | int main() { char buf[6],*restr; int n= sizeof (buf); restr=s_gets(buf,n); printf ( "%s" ,restr); return 0; } |
輸入9個字符。打印前5個。
輸入4個字符。打印全部。

TA貢獻1848條經驗 獲得超2個贊
大致意思是一次從stdin讀取一行,最多n個字符, 如果n個里面包含回車,截取回車前面的
如果不包含回車,一致讀直到讀到回車
或者
返回一個指向字符串的指針
- 3 回答
- 0 關注
- 960 瀏覽
添加回答
舉報