我有这个数组
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的解决方案是可行的。