3 回答

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

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超2個(gè)贊
大致意思是一次從stdin讀取一行,最多n個(gè)字符, 如果n個(gè)里面包含回車(chē),截取回車(chē)前面的
如果不包含回車(chē),一致讀直到讀到回車(chē)
或者
返回一個(gè)指向字符串的指針
- 3 回答
- 0 關(guān)注
- 956 瀏覽
添加回答
舉報(bào)