如何复制文件指针

时间:2015-10-20 19:12:26

标签: c++ filestream fgets

我想在同一个流上使用两次fgets。我已经定义了两个指向同一文件的文件指针但是当我在其中一个指针上使用fgets时,另一个也被修改了。

fun(FILE * input) {
    FILE * input_dup=input;
    char str[2];
    fgets(str, 2, input);
    fgets(str, 2, input_dup);
} 

在第二次调用fgets时,为什么要读取下一个字符..它应该给出相同的输出,因为它们都指向同一个位置

2 个答案:

答案 0 :(得分:1)

嗯,你正在根据一种基本的误解而努力:

如果复制指针,则不会复制它指向的对象。

碰巧,重复FILE没有标准方法(虽然有非标准的,但请参阅:Duplicating file pointers?)。
你不是SOL,你可以使用ftell获取当前位置,fseek返回那里(如果流是可搜索的,就像文件一样)。

答案 1 :(得分:-1)

与所有C ++编码一样,它完全按照您的要求进行操作。如果您想要另一个副本,您可以创建一个覆盖函数,告诉系统读取并执行和复制流并返回指向数组的指针。这将实现你的目标。

第二个解决方案是unget流的最后一个字符,然后再读一遍。