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 关注
- 889 浏览
添加回答
举报