将文本文件读入C中的二维数组

Reading a text file into a two dimentional array in C

我有一个如下所示的文本文件。

5
2   7
3   4   2

基本上, 第 1 行有 1 个元素, 第 2 行有 2 个元素, 第 3 行有 3 个元素, ... 最多包含 n 个元素的 n 行。

我需要阅读它们,并以这种方式放入二维数组中:

a[0][0] = 5
a[1][0] = 2
a[1][1] = 7
a[2][0] = 3
a[2][1] = 4
a[2][2] = 2
...

你明白了。

但是我只在 运行 时知道 n(行数)。我将如何将文件读入 2x2 数组?

如果我知道每行文本中的元素数量,并且每行的元素数量相同,我知道我可以执行以下操作。

fa = fopen("file.txt", "r");
for(i = 0; i < n; i++) {
    fgets(str, 1000, fa);
    sscanf(str, "%d %d %d", &a[i][0], &a[i][1], &a[i][2]);
}
fclose(fa);

但这对我没有帮助,因为我在每一行中有不同数量的元素。
我该怎么做?

像这样为数组分配内存:

int** array;

array = malloc(n * sizeof(*array)); /* Assuming `n` is the number of rows */
if(!array) /* If `malloc` failed */
{
    fputs(stderr, "Error allocating memory; Bailing out!");
    exit(-1);
}

int count = 1;
for(int i = 0; i < n; i++)
{
    array[i] = malloc(count * sizeof(**array));
    if(!array[i]) /* If `malloc` failed */
    {
        for(int j = 0; j < i; j++) /* free previously allocated memory */
        {
            free(array[j]); 
        }
        free(array);

        fputs(stderr, "Error allocating memory; Bailing out!");
        exit(-1);
    }
    count++;
}

然后,使用以下方法将文件中的数据读入数组:

FILE* fp = fopen("file.txt", "r");
if(!fp)
{
   for(int i = 0; i < n; i++) /* free previously allocated memory */
   {
      free(array[i]); 
   }
   free(array);

   fputs(stderr, "Error opening 'file.txt'; Bailing out!");
   exit(-1);
}

int max = 1;

for(int i = 0; i < n; i++)
{
    for(count = 0; count < max; count++)
    {
        fscanf(fp, "%d", &array[i][count]);
    }
    max++;
}

然后打印结果:

max = 1;

for(int i = 0; i < n; i++)
{
    for(count = 0; count < max; count++)
    {
        printf("array[%d][%d] = %d", i, count, array[i][count]);
    }
    max++;
}

最后,释放分配的内存:

for(int i = 0; i < n; i++)
{
   free(array[i]); 
}
free(array);