阵列大小超出范围

问题描述

我正在尝试编写代码,以XY的形式从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],Y[i]);
     i++;Ncouple++;
   }

   fclose(fptr);
   return 0;
}

当我执行时,我得到X [6]和Y [6],但是我的日期文件仅包含5行。我在哪里错了?

解决方法

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],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;