c - 函数 fscanf 首次使用后使应用程序崩溃

标签 c file for-loop scanf fclose

如果我评论fprintf(pf,"1111");该exe将崩溃,如果我保留它,我会得到2/3/2011(仅第一条记录)。如果我尝试关闭该文件,exe也会崩溃。

fscanf 是否将行末尾检测为文件末尾并读取 null?

我也尝试了 close(*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

最佳答案

欢迎使用 C 语言编程。

在 C 语言中,循环的写法如下:

for( i = 0;  i < n;  i++ )

不是像这样:

for( i = 1;  i <= n;  i++ )

关于c - 函数 fscanf 首次使用后使应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41707426/

相关文章:

c - 警告 : conversion to 'u8int' from 'int' may alter its value, 等

c - 为什么有些编译器使用 "a.out"作为可执行文件的默认名称?

c - 使用 select() 监视管道时出现段错误

linux - 如何在不提取整个文件的情况下更改存档 (.ear) 文件中的文件

c - 通过 for 循环切换大小写声明?

c++ - OpenCV:我是否超出了矩阵大小?

c - 如何分割和保存

c - 读取文件时出现奇怪的结果

android - 为什么 Android 布局文件名如此有限?

java - 针对 HashMap 中的所有值查找值