C 如何一次一个地将数字从数组复制到二进制文件中?
我正试图找到一种方法,将数组中的数字一次一个地复制到二进制文件中。我可以使用fwrite将整个数组复制到二进制文件中,但我想知道是否有一种方法可以一次复制一个数字 在函数CopyArrayToBinary中,如何修改fwrite,使其能够在二进制文件中一次打印一个数字 我的程序能够顺利编译,以下是我的代码: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
#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;