2

我有这个数组

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

2 回答 2

3

您不能通过单个将其写入文件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);
于 2012-04-04T15:37:02.947 回答
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作为 3-D 数组访问:

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

这将连续分配数据,您应该能够在一次fwrite调用中将其编写为

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

否则,小鬼的解决方案就是要走的路。

于 2012-04-04T15:46:15.850 回答