c语言的问题,不太理解这个函数,大神给解释一下?

char * s_gets(char *st, int n){
char * ret_val;
int i = 0; 
ret_val = fgets(st, n, stdin);
if (ret_val){
while (st[i] != '\0' && st[i] != '\n')
i++;
if (st[i] == '\n')
st[i] = '\0';
else
while (getchar() != '\n')
continue;
}

return ret_val;
}

手掌心
浏览 824回答 3
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维度大小的数组12345678int main(){    char buf[6],*restr;    int n=sizeof(buf);    restr=s_gets(buf,n);    printf("%s",restr);    return 0;}输入9个字符。打印前5个。输入4个字符。打印全部。

慕尼黑5688855

大致意思是一次从stdin读取一行,最多n个字符, 如果n个里面包含回车,截取回车前面的如果不包含回车,一致读直到读到回车或者返回一个指向字符串的指针
打开App,查看更多内容
随时随地看视频慕课网APP