c - 程序使用 fgets 停止读取文件

标签 c file csv fopen

如果有人能帮助我完成我的“程序”,那就太好了。我正在尝试读取 csv 文件并将其移动到二维数组。它停在第 17 行(共 200 行)。

    int main ()
{
   FILE * pFile;
   double **tab;
   char bufor [100];
   int i=0;
   tab = (double**)malloc(sizeof(double*));

   pFile = fopen ("sygnal1.csv" , "r");
   if (pFile == NULL) printf("Error");
   else 
        while (fgets (bufor , 100 , pFile))
            {
            tab[i] = (double *) malloc(2 * sizeof(double));
            sscanf(bufor, "%lf, %lf,", &tab[i][0], &tab[i][1]);
            printf("%lf.%lf.\n",tab[i][0],tab[i][1]);  //It's here only for testing
            i++;
            }
    printf("number of lines read %d\n",i);
    fclose (pFile);
    system("PAUSE");
    return 0;
}

最佳答案

您还没有为tab完全分配内存。您刚刚分配了一个(未初始化的)指针。当 i > 0 时,您就会陷入未定义行为。您需要分配至少与文件中可能存在的行一样多的元素,例如

   tab = malloc(sizeof(*tab) * MAX_LINES);

或在每次迭代后使用realloc来增加元素数量。

关于c - 程序使用 fgets 停止读取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13293934/

相关文章:

java - 它们真的是虚拟代码吗?

c - fscanf 每隔一行返回一次

Java UDP文件传输应用

javascript - NodeJS 创建 CSV 直接写入 Google Storage

javascript - dc.js - 选择 csv 中的列来渲染图表

c++ - 当我使用函数指针变量消失

c - GNU 制造商 : Exporting a Simply Expanded Variable

file - 异或文件解密

linux - 搜索和存储文件的特定部分

javascript - file.open 不是 Node.js 中的函数。文件读取