我刚开始用C语言学习文件,但是我的代码有问题。它可以很好地写入二进制文件,但是当我尝试读回值时,它返回的值要少一个,并且数组的返回值也要不同。 我知道我可能犯了一个愚蠢的错误,如果您能帮助我理解我会很棒。 这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
FILE *f;
if ((f=fopen("fis.bin","wb"))==NULL)
{
printf ("Error\n");
exit(1);
}
int *v;
int n,x;
char s[100];
scanf("%d",&n);
v=(int*)malloc(n*sizeof(int));
for (int i=0; i<n; i++)
{
scanf("%d",&v[i]);
x=fprintf(f,"%d\n",v[i]);
if (x<0)
perror("Error:");
}
fclose(f);
int *cit;
cit=(int*)calloc(n,sizeof(int));
if ((f=fopen("fis.bin","rb"))==NULL)
{
printf ("Error\n");
exit(1);
}
fseek(f,0,SEEK_END);
int sz = ftell(f)/sizeof(v[0]);
fseek(f,0,0);
int i=0;
if(!fread(cit,sizeof(int),sz,f))
perror("err: ");
for (i=0; i<sz; i++)
printf("%d\n",cit[i]);
printf("\n");
free(v);
free(cit);
fclose(f);
}
答案 0 :(得分:1)
问题是您正在使用fprintf
写入文件。
其中fprintf
代表string
的{{1}}表示形式。
例如,当您将integers
写入文件时,您正在将2
写入大小为1个字节的字符串。
"2"
因此将x=fprintf(f,"%d\n",v[i]);
替换为fprintf
,如下所示。
fwrite
fwrite(&v[i], sizeof(v[0]), 1, f);
写入整数的二进制表示形式。