我怎么能读取fgets
字符串从键盘缓冲区,未知的长度?*fgets(char *s, int size, FILE *stream);
我可以给fgets
一个NULL
在int
的位置吗?
不,您需要知道行结束符是什么(通常是换行符和/或回车符),并在循环中继续阅读,直到得到它为止。当然,您还需要扩大缓冲区,并在获得每个片段时将其复制到其中。
如果你有,POSIX' getline()
做这个
fgets
的长度参数是该函数比gets
"更好"的原因之一。你必须指定你要传递的缓冲区可以容纳的数据量,否则你的应用程序可能会崩溃。
在我的大多数应用程序中,我只是将缓冲区的使用时间延长几倍,以适应我期望接收的任何内容。
使用getline可能会导致malloc/realloc,如果您对使用动态内存没有问题,请随意使用该函数。我更喜欢简单的buffer[MAX_SIZE+1]
变量