2012-04-04 3 views
2

я есть этот массивКак написать и прочитать трехмерный динамический массив символов в файл?

char ***three_dim=0; 

three_dim выделяется и заполняется данными. После этого я должен написать его содержимое в файл и прочитать. Я пробовал написать, но это не удается.

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

EDIT:

Вот как он выделяется:

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

Как вы его выделили? Вероятно, он терпит неудачу, потому что он не распределяется компактно, а как «массив указателей на массивы указателей на массивы». – Imp

+0

* Как это происходит? Это крушение? Он ничего не пишет? Он пишет мусор? Во-вторых, это C или C++? Вы используете C-style I/O, но выделение памяти в стиле C++. Что он? –

ответ

3

Вы не можете записать его в файл с помощью одного fwrite(), потому что ваш массив не выделяется в качестве компактной области outer_dim * ROWS * COLUMNS байт.

Как вы выделили его для цикла, вы также должны выводить его во время цикла.

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

Как и другие, наиболее вероятной проблемой является то, что память не была распределена смежно.

Если строки и столбцы константы времени компиляции, вы могли бы сделать что-то вроде следующего:

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); 

В противном случае решение imp - это путь.

+0

Если бы я мог принять два ответа. Я бы тоже принял твое. – John

Смежные вопросы