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