未知字符串长度的fgets

时间:2013-01-10 14:37:42

标签: c fgets

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

我可以fgets NULL int位置{{1}}吗?

2 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:3)

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

在我的大多数应用程序中,我只需要使用缓冲区几次,只要它符合我期望接收的任何内容。

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

相关问题