【发布时间】:2015-10-08 08:03:07
【问题描述】:
我正在尝试找出一种将数组中的数字复制到二进制文件一次一个数字的方法。我可以使用 fwrite 将整个数组复制到二进制文件中,但我想知道是否有一种方法可以这样做 one-number-at-a-time 。
在 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;
}
【问题讨论】:
-
请缩进您的代码。
-
fread((char *)b, sizeof(int),10,fpointer);是错误的。您尝试将 10 个整数(通常为 40 个字节)读入 10 个字节的缓冲区。 -
CopyArrayToBinary函数有什么问题?除了硬编码要写入的长度并且不进行错误检查之外,该功能应该按预期工作。您将 6 个整数写入文件。如果你想写一个 int 而不是 6 个 int,写fwrite((char *)a, sizeof(int), 1 , fbin);. -
free(a);你正在释放一个没有由 malloc() 获得的对象。 -
free(a) 正在尝试释放堆栈变量 [在 main 中定义]——这不是一件好事,所以删除它。即使它是 malloc 的,你也不想在 copy func 中释放它,因为当你调用 append 时它会是垃圾。此外,fwrite 需要一个 const void *,因此不需要强制转换为 char *。至于一次一个,做: for (i = 0; i
标签: c arrays file printf fwrite