提问人: 提问时间:9/30/2020 最后编辑:Vlad from Moscow 更新时间:9/30/2020 访问量:66
数组大小超出范围 [duplicate]
Size of array out of range [duplicate]
问:
我正在尝试编写以 x y 的形式从 FILE 中读取几个数字并将它们存储在两个数组中的代码,并且我希望该函数返回对数,我尝试使用包含 5 对的 FILE,但似乎 FILE *ptr 超越并到达第六行, 这是我的代码:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int X[100],Y[100];
int i=0; int Ncouple = 0 ;int M = 5;
FILE *fptr;
fptr = fopen("num.data", "r");
if( fptr == NULL)
{
printf("fail");
exit(1);
}
while(!feof(fptr))
{
fscanf(fptr,"%d %d",&X[i],&Y[i]);
printf("\nX[%d] = %d Y[%d] = %d\n",i,X[i],i,Y[i]);
i++;Ncouple++;
}
fclose(fptr);
return 0;
}
当我执行时,我得到 X[6] 和 Y[6],但我的日期文件只包含 5 行。我错在哪里?
答:
3赞
Vlad from Moscow
9/30/2020
#1
while 语句中的条件是您所描述的行为的原因。
while(!feof(fptr))
在您尝试读取文件中不存在的记录后,此条件将等于 true。
重写 while 循环,如
while( fscanf(fptr,"%d %d",&X[i],&Y[i]) == 2 )
{
printf("\nX[%d] = %d Y[%d] = %d\n",i,X[i],i,Y[i]);
i++;Ncouple++;
}
注意这一点,而不是这一行声明
int i=0; int Ncouple = 0 ;int M = 5;
最好写
int i=0;
int Ncouple = 0;
int M = 5;
或者至少喜欢
int i=0, Ncouple = 0, M = 5;
评论
0赞
9/30/2020
谢谢,我在这个问题上浪费了太多时间,但我想知道为什么这样做,为什么 2 ?
0赞
Vlad from Moscow
9/30/2020
@ElMehdiAKKOUCHE 如果成功,函数 fscanf 将返回分配的输入项数。
0赞
Vlad from Moscow
9/30/2020
@ElMehdiAKKOUCHE 由于没有更多的答案,您可以选择我的答案作为结束您的问题的最佳答案。
0赞
9/30/2020
对不起,你能用我不明白的不同方式解释吗
0赞
Vlad from Moscow
9/30/2020
@ElMehdiAKKOUCHE 如果 fscanf 的调用成功,则意味着项目 C[i] 和 Y{i] 都获得了值。有两个项目,它们都有值。因此,在成功的情况下,该函数返回 2。如果出现错误,它将返回 EOF。
评论