簡體   English   中英

在 c 中使用 fscanf 從文件獲取分段錯誤

[英]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
  1. 您不檢查fopen是否成功。 如果文件指針為 NULL,則調用feoffscanf調用未定義行為

  2. while(feof(matrix_r)){

while(.feof(...)))總是錯的( 為什么“while(?feof(file) )”總是錯的? ),但你的那個根本沒有邏輯意義(因為你想scanf它是否是文件末尾)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM