[英]Getting segmentation fault while from a file using fscanf in c
int main() {
FILE *matrix_r;
matrix_r=fopen("matrix.txt","r");
double x;char c;
while(feof(matrix_r)){
fscanf(matrix_r,"%lf%c",&x,&c);
printf("%lf%c",x,c);
}
fclose(matrix_r);
return 0;
}
嘗試從文件中讀取浮點值但出現分段錯誤核心轉儲錯誤。 matrix.txt 存儲浮點數矩陣。
matrix.txt 的內容如下。
0.000000,876.671546,448.879717,1349.827396
876.671546,0.000000,1319.195209,964.193445
448.879717,1319.195209,0.000000,1741.628261
1349.827396,964.193445,1741.628261,0.000000
fopen()
失敗, feof(NULL)
導致段錯誤。 如果fopen()
成功,則feof()
將返回 false,並且循環不會運行,但您的程序不會出現段錯誤。
檢查fopen()
和fscanf()
的返回值。 如果您需要找出為什么fscanf()
無法讀取 2 個項目,則只需調用feof()
。
#include <stdio.h>
int main() {
FILE *matrix_r = fopen("matrix.txt", "r");
if(!matrix_r) {
perror("fopen");
return 1;
}
for(;;) {
double x;
char c;
int rv = fscanf(matrix_r, "%lf%c", &x, &c);
if(rv != 2)
break;
printf("%lf%c", x, c);
}
fclose(matrix_r);
}
這是 output:
0.000000,876.671546,448.879717,1349.827396
876.671546,0.000000,1319.195209,964.193445
448.879717,1319.195209,0.000000,1741.628261
1349.827396,964.193445,1741.628261,0.000000
您不檢查fopen
是否成功。 如果文件指針為 NULL,則調用feof
或fscanf
調用未定義行為
while(feof(matrix_r)){
while(.feof(...)))
總是錯的( 為什么“while(?feof(file) )”總是錯的? ),但你的那個根本沒有邏輯意義(因為你想scanf
它是否是文件末尾)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.