我无法将两个文件合并为第三个文件

I cant merge two files in a third one

当我显示第三个文件时,我的问题如下,它显示了很多 0 而不是文件 1 和文件 2 的整数。由于某种原因,我的文件以 4,00 KB(4.096 字节)结尾我不知道。 顺便说一句,第三个文件应该首先是:file1 的第一个 int,然后是 file2 的第一个,依此类推

编辑:我正在测试这个问题,在显示之前我发现第三个文件的大小是正确的。它是 24,这是文件 1 和文件 2 的总和。但是当我读到它时,它变得疯狂

 #include <iostream>

using namespace std;
int main()
{
  int buffer1, buffer2, buffer3;
  
  //What is written in file 1 and file 2
  int file1_content[] = {1,3,5};
  int file2_content[] = {2,4,6};

  FILE* f3, *f1, *f2;
  f1 = fopen("archivo1", "rb");
  f2 = fopen("archivo2", "rb");
  f3 = fopen("archivo3", "wb+");
  if(!f1)
  {
      cout<<"Error el archivo 1 no se pudo abrir"<<endl;
      return 1;
  }
  if(!f2)
  {
      cout<<"Error el archivo 2 no se pudo abrir"<<endl;
      return 1;
  }
  if(!f3)
  {
      cout<<"Error el archivo 3 no se pudo abrir"<<endl;
      return 1;
  }

   //write file 1 and file two in file 3
   while(fread(&buffer1, sizeof(int), 1, f1) && fread(&buffer2, sizeof(int), 1, f2) )
   {
      fwrite(&buffer1, sizeof(int), 1, f3);
      fwrite(&buffer2, sizeof(int), 1, f3);
   }
   fclose(f1);
   fclose(f2);

   //show file 3
   while(fread(&buffer3, sizeof(int), 1, f3))
   {
       cout<<buffer3<<" ";
   }
   //EXPECTED OUTPUT
   //1 2 3 4 5 6 
   fclose(f3);

    return 0;
}

您的代码有未定义的行为。

根据 §7.21.5.3 ¶7 of the ISO C11 standard,以更新模式 (+) 打开文件时,以下限制适用:

  1. 在没有对 fflush 函数或文件定位函数(fseekfsetposrewind 的中间调用的情况下,输出不得直接跟在输入之后).
  2. 除非输入操作遇到 end-of-file.
  3. ,否则在不调用文件定位函数的情况下,输入不得直接跟在输出之后

在您的程序中,您违反了规则 #1。最简单的解决方案是在对 fwritefread 的调用之间添加对 rewind 的调用,无论如何你都应该这样做,因为你想从文件的开头开始读取。