c-如何在文件中写入和读取三维动态char数组



我有这个数组

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];
            }

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

当您在for循环中分配它时,您还必须在for循环中将其输出。

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

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

如果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的解决方案是可行的。

最新更新