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