用于未知字符串长度的fgets



我怎么能读取fgets字符串从键盘缓冲区,未知的长度?*fgets(char *s, int size, FILE *stream);

我可以给fgets一个NULLint的位置吗?

不,您需要知道行结束符是什么(通常是换行符和/或回车符),并在循环中继续阅读,直到得到它为止。当然,您还需要扩大缓冲区,并在获得每个片段时将其复制到其中。

如果你有,POSIX' getline()做这个

fgets的长度参数是该函数比gets "更好"的原因之一。你必须指定你要传递的缓冲区可以容纳的数据量,否则你的应用程序可能会崩溃。

在我的大多数应用程序中,我只是将缓冲区的使用时间延长几倍,以适应我期望接收的任何内容。

使用getline可能会导致malloc/realloc,如果您对使用动态内存没有问题,请随意使用该函数。我更喜欢简单的buffer[MAX_SIZE+1]变量