C语言关于fgets()

char * s_gets(char * st,int n){ char * ret_val; char * find; ret_val = fgets(st,n,stdin); if(ret_val) { find = strchr(st,'\n'); if(find) *find = '\0'; else while(getchar() != '\n') continue; } return ret_val;}这个函数中的while循环是做什么用的?fgets()函数不是保留‘\n’换行符吗?那strchr()函数不是一定能找的到吗既然如此else中的语句有什么用呢?那while语句是在什么情况下 才会用的到呢?

fgets返回有两种情况,一种是成功的读到了一整行。另一种是读取的字符数达到了第二个参数的值,这里就是n。
如果是第一种情况,那会包含\n,也就是find的情况,把\n替换成\0.
如果是第二种情况,就不会有\n,表示没有读完。后续的while把这一行的剩余数据读走,并抛弃。追问

那如果遇到了你说第二种情况,并且将while循环去掉的话,是不是就该像gets()那样因为输入的字符串过长导致缓冲区溢出呢?

追答

不会的,超出n的会继续在缓冲中 不会被读取。
如果没有while,那么下次fgets的时候会读到剩余的

温馨提示:答案为网友推荐,仅供参考
相似回答