【发布时间】:2017-01-17 21:35:30
【问题描述】:
如果我评论fprintf(pf,"1111"); exe 会崩溃,如果我保留它,我会得到 2/3/2011(只有第一条记录)。如果我尝试关闭文件,exe 也会崩溃。
fscanf 是否将行尾检测为文件尾并读取 null?
我也试过关闭(*pf),它仍然崩溃。
fprintf不应该在最终代码中使用,我不是故意使用它,但是当我使用它时,我观察到exe成功读取第一行
Data* d;
fscanf(pf,"%d",&n);
d=calloc(n,sizeof(Data* ));
for(i=0;i<n;i++){
if(fscanf(pf,"%d/%d/%d",&(d[i].zi),&(d[i].luna),&(d[i].an))!=3) break;
printf("%d/%d/%d ",d[i].zi,d[i].luna,d[i].an);
// fprintf(pf,"1111"); with this I observed that first data can be read
}
fclose(pf);
输入
3
2/3/2011
2/2/2012
2/2/2016
【问题讨论】:
-
听起来 pf 是 NULL。你查看
fopen的返回码了吗? -
d[i]的类型是什么?d的类型是什么? -
1)
d=(Data*)calloc(n,sizeof(Data* ));-->d=calloc(n,sizeof(Data));2)for(i=1;i<=n;i++){-->for(i=0;i<n;i++){3) 删除fprintf(pf,"1111");4)fscanf(pf,"%d",&n);移动到d=calloc(n,sizeof(Data));之前 -
在声明
d=(Data*)calloc(n,sizeof(Data*))中,n是未定义的,更何况sizeof(Data)和sizeof(Data*)可能是不同的。 -
@BLUEPIXY 谢谢,这就是答案,它起作用了。你能把它作为答案发布,因为我不能投票给 de cmets 吗? sizeof(Data) 我现在看到的是 12 而 sizeof(Data*) 是 4
标签: c file for-loop scanf fclose