我需要从不同的流中读取数据(不仅来自stdin)。我已经发现了fgets函数,它可以读取一些有限数量的字符,但我需要得到整个字符串像gets,但我必须指定输入流。请帮助解决这个问题。
答案 0 :(得分:0)
读取整个文件的正常过程如下:
此网站上的示例正是如此:http://www.cplusplus.com/reference/cstdio/fread/
如果要读取特殊字符,则只需在循环中运行fgets,然后使用realloc调整缓冲区大小。常见的方法是每次增加缓冲区大小而不是固定量,而是增加值,例如每次循环迭代时将其大小加倍。这样,您将执行最多的log(n)realloc调用。
答案 1 :(得分:0)
希望我明白了...你需要的是寻找文件结束(EOF),这是在遇到文件结尾的时候设置的(猜猜是什么?)。
对于缓冲区大小,您可以先检查流大小,以确保为接收缓冲区分配足够的内存。
使用reallocate通常不是一个好选择。它很慢,只表明你没有预料到内存需求。除非绝对必要(非常严格的内存限制),否则最好分配比重新分配更多的东西。当然,没有什么比#34;右边"分配