如何一次一个地将数字中的数字复制到二进制文件中?

时间:2015-10-08 08:03:07

标签: c arrays file printf fwrite

我试图想出一种方法将数字从数组复制到二进制文件一次一个数。我可以使用 fwrite 将整个数组复制到二进制文件中,但我想知道是否有一种方法可以这样做一次一个数字

CopyArrayToBinary 功能中,如何修改 fwrite ,以便能够一次打印一个数字到二进制文件。

我的程序能够编译没有问题,这是我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void CopyArrayToBinary(int a[]);
void AppendNumbers(int a[]);
void DisplayBinFile(char fname[]);

int main()
{
     int a[6]={30,60,10,90,40,70};

     CopyArrayToBinary(a);
     AppendNumbers(a);
     DisplayBinFile("binary.txt");

     printf("\n\n");
     system("PAUSE");
     return 0;
}

 void CopyArrayToBinary(int a[])
 {
     FILE * fbin;
     fbin = fopen("binary.txt","w");
     int i;

     fwrite((char *)a, sizeof(int), 6 , fbin);

     free(a);
     fclose(fbin);

     return 0;
 }

  void AppendNumbers(int a[])
 {
  int c[4]={15,45,35,74};
  FILE * fpointer;
  fpointer = fopen("binary.txt", "a");

  fwrite((char *)c,sizeof(int),4,fpointer);

  free(a);
  fclose(fpointer);

 return 0;
}

void DisplayBinFile(char fname[])
{
  FILE * fpointer;
  int i ;
  int b[10];

    fpointer = fopen(fname, "r");
    fread((char *)b, sizeof(int),10,fpointer);

  //DISPLAY ARRAY B
  for(i=0; i<10; i++)
 {
     printf("%d ",b[i]);
 }

  fclose(fpointer);

 return 0;
}

1 个答案:

答案 0 :(得分:0)

fwrite原型是:

size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)

其中nmemb是您要编写的元素数。

请注意,如果您想每次添加一个字符,则必须使用"w+"(或更好的"wb+")选项打开文件,以便在文件末尾添加字符。

由于CopyArrayToBinary函数中的free(a)指令,

您的代码无法正常工作。您无法释放指向堆栈分配数组的指针。使用free释放堆malloc变量。