我如何编写和读取三维动态字符数组到文件?

时间:2012-04-04 15:16:14

标签: c multidimensional-array fwrite dynamic-arrays

我有这个数组

char ***three_dim=0;
分配

three_dim 并填充数据。 在此之后,我必须将其内容写入文件并回读。 我已经尝试过以下内容来编写它但它失败了。

FILE *temp;
temp=fopen("temp","w");
fwrite(three_dim,outer_dim*ROWS*COLUMNS,1,temp);
fclose(temp);

编辑:

以下是如何分配:

three_dim=new char**[outer_dim];
         for(int i=0;i<outer_dim;++i)
            {
                three_dim[i]=new char*[ROWS];
                for(int k=0;k<ROWS;++k)
                    three_dim[i][k]=new char[COLUMNS];
            }

2 个答案:

答案 0 :(得分:3)

您无法通过单个fwrite()将其写入文件,因为您的数组未被分配为outer_dim * ROWS * COLUMNS字节的紧凑区域。

当您在for-cycle中分配它时,您还必须以for循环输出它。

for (i = 0; i < outer_dim; i++)
    for (j = 0; j < ROWS; j++)
        fwrite(three_dim[i][j], COLUMNS, 1, temp);

答案 1 :(得分:2)

正如其他人所说,最可能的问题是内存没有被连续分配。

如果您的ROWS和COLUMNS是编译时常量,您可以执行以下操作:

char (*three_dim)[ROWS][COLUMNS]; // declare three_dim as a pointer to a 
                                  // ROWSxCOLUMNS array of char
...
three_dim = malloc(sizeof *three_dim * outer_dim);

然后,您可以访问three_dim作为三维数组:

three_dim[i][j][k] = something();

这将连续分配数据,您应该可以在fwrite次调用中将其写为

fwrite(three_dim, sizeof *three_dim * outer_dim, 1, temp);

否则,imp的解决方案就是可行的方法。