未正确声明数组检测到堆栈粉碎错误

Stack smashing error detected by not declaring array properly

我无法解决这个错误,请在我错的地方帮助我,也请告诉我如何使用 GNU 调试器,因为当我使用它时,“1.c 不是一个可执行文件”错误发生。

这是我的代码的 ADT 文件:- Sparse.c

这是我的代码:-

char filename[4];
int i,j,vectorCount=0;
refFile=fopen("x3.txt","r");
for(i=0; i<=100; i++){
    fscanf(refFile,"%f",&x[i].value);
    x[i].row=i;
    x[i].col=1;
}
for(i=1; i<=10; i++){
    sprintf(filename,"data/y%d.txt",i);
    FILE *fptr=fopen(filename,"r");
    y=newSparse(100,1,0);
    for(j=0; j<100; j++){
        fscanf(fptr,"%f",&y[j].value);
        y[j].row=j+1;
        y[j].col=1;
    }
    if(classCheck(x, y)==1){
        vectorCount++;
    }
}

您声明

char filename[4];

所以 filename 可以包含最多 3 个字符长的文件名(4-1,因为 NUL 终止符)。

后来你有这个:

sprintf(filename,"data/y%d.txt",i);

"data/y%d.txt"明显长于3个字符

所以声明 char filename[100]; 应该可以完成工作。