我有这个数组
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];
}
答案 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的解决方案就是可行的方法。