簡體   English   中英

使用fgets和sscanf從CSV文件讀取時EXC_BAD_ACCESS

[英]EXC_BAD_ACCESS when reading from csv file using fgets and sscanf

我正在嘗試從巨大的.csv文件(大約100,000行)中讀取。 使用fgets提取整個行,然后使用sscanf讀取行內的21個int值。 但是,sscanf在第758行返回錯誤EXC_BAD_ACCESS。我試圖增加緩沖區的大小,並且可以讀取更多行,但不是全部。 有沒有更優雅,更干凈的方法來使用C讀取海量數據? 謝謝。

    char buffer[316]; // buffer to contain one line
    int x[20][100000]; // int values saved in a matrix
    int line = 0; // counter for lines
    int j = 0; // counter for lines (excluding headers)
    FILE *fp;
    char fname[] = "/Users/basho/data_TS-20.csv";

    fp = fopen(fname, "r");
    if(fp == NULL) {
        printf("%s file not open!\n", fname);
        return -1;
    }

    // read one line at a time using fgets
    while (fgets(buffer, sizeof buffer, fp) != NULL) {
        if (line > 1) // we first skip the two first lines of the file, some empty line and the header.
        {
            printf("line %d\n",line);
            sscanf(buffer, "%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d, ",
                   &x[0][j], &x[1][j], &x[2][j], &x[3][j], &x[4][j], &x[5][j], &x[6][j], &x[7][j], &x[8][j], &x[9][j],
                   &x[10][j], &x[11][j], &x[12][j], &x[13][j],&x[14][j], &x[15][j], &x[16][j], &x[17][j], &x[18][j],
                   &x[19][j], &x[20][j]);
            for(int i = 0; i<20; i++){
                printf("%d ",x[i][j]);
            }
            printf("%d\n",x[20][j]);
            j = j+ 1;
            //}
        }
        line =line + 1;

    }

    fclose(fp);

    return 0;
}

評論int x[20][100000]; &x[20][j] ->關閉1。

// int x[20][100000];
int x[21][100000];

j = j+ 1;
if (j >= 100000) break; 

暫無
暫無

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

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