1

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

我可以给fgets一个大小NULL的位置吗?int

4

2 回答 2

7

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

如果你有它,POSIX'getline()会这样做。

于 2013-01-10T14:40:39.177 回答
3

的长度参数fgets是函数“优于”的原因之一gets。您绝对必须指定您传递的缓冲区可以容纳的数据量,否则您的应用程序可能会崩溃。

在我的大多数应用程序中,只要需要满足我期望接收的任何内容,我都会多次使用缓冲区。

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

于 2013-01-10T14:45:50.567 回答