如何使用fgets获得整线

时间:2014-11-30 16:21:34

标签: c++ c string unix stdin

我需要从不同的流中读取数据(不仅来自stdin)。我已经发现了fgets函数,它可以读取一些有限数量的字符,但我需要得到整个字符串像gets,但我必须指定输入流。请帮助解决这个问题。

2 个答案:

答案 0 :(得分:0)

读取整个文件的正常过程如下:

  • 打开文件
  • 寻求结束
  • 阅读职位
  • 创建该大小的缓冲区
  • 寻求开始
  • 读取缓冲区
  • 关闭文件

此网站上的示例正是如此:http://www.cplusplus.com/reference/cstdio/fread/

如果要读取特殊字符,则只需在循环中运行fgets,然后使用realloc调整缓冲区大小。常见的方法是每次增加缓冲区大小而不是固定量,而是增加值,例如每次循环迭代时将其大小加倍。这样,您将执行最多的log(n)realloc调用。

答案 1 :(得分:0)

希望我明白了...你需要的是寻找文件结束(EOF),这是在遇到文件结尾的时候设置的(猜猜是什么?)。

对于缓冲区大小,您可以先检查流大小,以确保为接收缓冲区分配足够的内存。

使用reallocate通常不是一个好选择。它很慢,只表明你没有预料到内存需求。除非绝对必要(非常严格的内存限制),否则最好分配比重新分配更多的东西。当然,没有什么比#34;右边"分配