【发布时间】:2019-05-26 02:45:07
【问题描述】:
我刚开始学习 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);
}
【问题讨论】:
-
如果我们有文件,我想我们可以提供帮助。
-
好吧,无论文件中的值如何,输出都是相同的。我只尝试了 3 个值,并且 sz 返回 2 而不是 3 。不知道为什么
-
int sz = ftell(f)/sizeof(v[0]);不适合您的要求,因为ftell以字节为单位返回位置,考虑您已编写1 2 3 4ftell返回7但您想要的是16字节。 -
阅读每个使用函数的文档(例如scanf)。阅读how to debug small programs
-
您正在使用
fprintf()写入文件并使用fread()读取相同的文件。对于int的数组,两种格式排成一列的可能性为零。