我想讀一個帶有9列「100萬」行的文件。該項目運作良好,如果該文件具有在最大200,000行,否則我看到以下錯誤:C:緩衝區溢出中fscanf的分段錯誤?
分段故障:核心轉儲
錯誤退出代碼:139
的問題是,我想讀取文件以便我可以讀取不同列中的值,因此,我無法使用可掃描整行的「fgets」。我無法找到解決這個問題的好辦法,我可以得到一些幫助嗎?
這是我的節目的快照(省略「Y」的定義(如下所示)):
int main(){
int number=290000;
int k,u,i,n = 10000;
float ns_ux[number], ns_uy[number], ns_uz[number], xn[number], yn[number], zn[number];
float l[number],b[number], ns[number], xf,x0,step,s;
FILE *fp=NULL;
fp=fopen("File_new.txt","w");
printf("Enter x0, xf, no. of subintervals: ");
scanf("%f%f%d",&x0, &xf,&n);
FILE* val= NULL;
printf("k xn yn zn int_val tau \n");
val=fopen("file.txt", "r");
for(u=0;u<=(number-1);u++){
fscanf(val,"%f %f %f %f %f %f %f %f %f", &xn[u], &yn[u], &zn[u], &ns_ux[u], &ns_uy[u], &ns_uz[u], &l[u], &b[u], &ns[u]);// \t is tab
}
for(k=0;k<=(number-1);k++){
step = (xf-x0)/n;
s = y(x0,xn[k],yn[k], zn[k], ns_ux[k], ns_uy[k], ns_uz[k], l[k], b[k], ns[k]) + y(xf,xn[k],yn[k], zn[k], ns_ux[k], ns_uy[k], ns_uz[k],l[k], b[k], ns[k]);
for(i = 1; i < n; i++){
s += 2*y(x0+i*step,xn[k],yn[k], zn[k], ns_ux[k], ns_uy[k], ns_uz[k], l[k], b[k], ns[k]);
}
int_val = s*step/2;
fprintf(fp,"%f\t%f\t%1.7f\t%f\n",l[k],b[k],fabs(int_val),ns[k]);
}
fclose(fp);
return 0;
}
另一個解決方案是'#define number 290000'和'static float ns_ux [number]'等。 –
@ M.M注意到,先生。 – ameyCU
非常感謝你! – Phyast10