Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何一次一个地将数字从数组复制到二进制文件中?_C_Arrays_File_Printf_Fwrite - Fatal编程技术网

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

C 如何一次一个地将数字从数组复制到二进制文件中?,c,arrays,file,printf,fwrite,C,Arrays,File,Printf,Fwrite,我正试图找到一种方法,将数组中的数字一次一个地复制到二进制文件中。我可以使用fwrite将整个数组复制到二进制文件中,但我想知道是否有一种方法可以一次复制一个数字 在函数CopyArrayToBinary中,如何修改fwrite,使其能够在二进制文件中一次打印一个数字 我的程序能够顺利编译,以下是我的代码: #include <stdio.h> #include <stdlib.h> #include <string.h> void CopyArrayToB

我正试图找到一种方法,将数组中的数字一次一个地复制到二进制文件中。我可以使用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;
}
原型是:

size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)
其中,nmemb是要写入的元素数

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


由于CopyArrayToBinary函数中的freea指令,您的代码无法正常工作。无法释放指向堆栈分配数组的指针。使用free来释放堆位置错误的变量。

请缩进代码。freadchar*b,sizeofint,10,fpointer;这是错误的。您尝试将通常为40字节的10个整数读入10字节缓冲区。CopyArrayToBinary函数有什么问题?除了硬编码要写入的长度和没有进行错误检查外,该函数还应该按预期工作。向文件写入6个整数。如果要写入一个int而不是6个int,请写入fwritechar*a,sizeofint,1,fbin;。弗里亚;您正在释放malloc未获得的对象。freea正在尝试释放堆栈变量[在main中定义]-这不是一件好事,请将其删除。即使它是malloc'ed,您也不会希望在copy func中释放它,因为调用append时它将是垃圾。此外,fwrite接受常量void*,因此不需要强制转换为char*。至于一次一个,do:对于i=0;i<6++我写&a[i],sizeofint,1,fbin;