我甚至不确定fscanf()是否真的遇到EOF。这是我的代码
#include<stdio.h>
int main()
{
int i=0,a[13];
FILE *fp;
fp=fopen("test.txt","r");
if(fp==NULL)
{
printf("Error");
}
else
{
i=0;
while((fscanf(fp,"%d",&a[i]))!=EOF)
{
printf("%d\n",a[i]);
i++;
}
printf("%d",i);
}
fclose(fp);
return 0;
}
测试输入是:
12
32
45
65
92
-1
0
61
15
13
12
24
0
4
我在代码块中运行它。
答案 0 :(得分:4)
这不是fsanf()
返回EOF
,而是在此之前,通过提供更长的输入序列,您将超越目标数组{{1} }。尝试访问超出范围的内存调用undefined behavior。结果可以是任何。
当你已经有一个固定长度的数组时,不要允许存储任意数量的输入,用数组大小(a
)限制索引。
答案 1 :(得分:0)
您的输入有14个元素,您尝试将其读入13个元素数组a[13]
。这就是你崩溃的原因。
增加阵列的大小或保护阵列不溢出。例如
#include<stdio.h>
#define ARR_SIZE 14
int main()
{
int i;
int a[ARR_SIZE];
FILE *fp;
fp=fopen("test.txt","r");
if(fp==NULL)
{
printf("File open error\n");
}
else
{
i=0;
while ( (i<ARR_SIZE) && (fscanf(fp,"%d",&a[i]))!=EOF)
{
printf("%d\n",a[i]);
i++;
}
printf("%d",i);
}
fclose(fp);
return 0;
}