我的程序需要從輸入文件讀取值(整數和浮點數)。一行中有許多值,由製表符分隔,並且文件中有很多行。我已經計劃逐行讀取整個文件,解析每行並將整個內容存儲到由二維靜態數組組成的結構中。然後,當整個東西存儲在內存中時,我會進行計算,將結果填充到另一個結構中,最後將該結構的內容轉儲到輸出文件中。當然,它不起作用,當試圖運行程序時出現分段錯誤錯誤。包含數組結構的分段錯誤
這是我的定義輸入結構:
#define sim_spectrum_constant 122
#define real_spectrum_constant 181
#define num_days 365
struct spectrum {
int year[sim_spectrum_constant][num_days];
int month[sim_spectrum_constant][num_days];
int day[sim_spectrum_constant][num_days];
int hour[sim_spectrum_constant][num_days];
int minute[sim_spectrum_constant][num_days];
int second[sim_spectrum_constant][num_days];
float wavelength[sim_spectrum_constant][num_days];
float irr_total[sim_spectrum_constant][num_days];
float irr_direct[sim_spectrum_constant][num_days];
float irr_diffuse[sim_spectrum_constant][num_days];
};
struct spectrum pS;
這是我的初始化數組:
// initialization
for (i=0; i<sim_spectrum_constant; i++) {
for (j=0; j<num_days; i++) {
pS.year[i][j] = 0;
pS.month[i][j] = 0;
pS.day[i][j] = 0;
pS.hour[i][j] = 0;
pS.minute[i][j] = 0;
pS.second[i][j] = 0;
pS.wavelength[i][j] = 0.;
pS.irr_total[i][j] = 0.;
pS.irr_direct[i][j] = 0.;
pS.irr_diffuse[i][j] = 0.;
}
}
這是我在從輸入文件中的值如何讀:
// determining how many simulated spectrums are provided in the file + reading spectrums into the array
row = 0;
n = 0;
if (fgets(line, sizeof(line), pInput_spektrum) == NULL) {
printf ("****Simulated spectrum doesn't contain any entries!! -- %s\nPress <enter> to exit...\n", strerror(errno));
getchar();
exit(-1);
}
while(fgets(line, sizeof(line), pInput_spektrum) != NULL) {
result=sscanf(line, "%i %i %i %i %i %i %f %f %f %f", pS.year[row][n], pS.month[row][n], pS.day[row][n], pS.hour[row][n], pS.minute[row][n], pS.second[row][n], pS.wavelength[row][n], pS.irr_total[row][n], pS.irr_direct[row][n], pS.irr_diffuse[row][n]);
row ++;
if (row == sim_spectrum_constant) {
n ++;
last_row = row;
row = 0;
}
}
我是否在構思,實施或兩者都失敗?什麼導致分段錯誤?
謝謝!
這些數組是否在某處初始化? – 2013-05-11 17:57:29
不,這是強制性的嗎?這是我的第一個C程序在十年,對不起:( – 2013-05-11 18:21:08
我剛纔添加的初始化和重新編譯,還是同樣的問題,看來,我已經更新了上面的init是怎麼做的。 – 2013-05-11 18:46:10