2012-04-04 9 views
2

Ich habe dieses ArrayWie schreibe und lese ich ein dreidimensionales dynamisches Char-Array in eine Datei?

char ***three_dim=0; 

three_dim zugeordnet ist und mit Daten gefüllt. Danach muss ich seinen Inhalt in eine Datei schreiben und zurücklesen. Ich habe folgendes versucht, um es zu schreiben, aber es schlägt fehl.

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

EDIT:

Hier ist, wie es zugeordnet ist:

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

Wie haben Sie es zugeordnet? Es schlägt wahrscheinlich fehl, weil es nicht kompakt zugewiesen wird, sondern als ein "Array von Zeigern zu Arrays von Zeigern zu Arrays". – Imp

+0

* Wie * schlägt es fehl? Stürzt es ab? Schreib es nichts? Sagt es Müll? Zweitens, ist das C oder C++? Sie verwenden C-style I/O, aber C++ - Stil Speicherzuweisung. Welches ist es? –

Antwort

3

Sie es nicht in der Datei von einer einzigen fwrite() schreiben können, weil das Array nicht als kompakte Fläche von outer_dim * ROWS * COLUMNS zugeordnet ist Bytes.

Wie Sie es in einem Zyklus zugeteilt haben, müssen Sie es auch in einem Zyklus ausgeben.

2

Wie andere gesagt haben, ist das wahrscheinlichste Problem, dass der Speicher nicht zusammenhängend zugewiesen wurde

Wenn Ihre Zeilen und Spalten Kompilierung-Konstanten sind, könnten Sie etwas wie das folgende tun:

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

Sie dann three_dim als 3-D-Array zugreifen:

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

Diese wird die Daten zusammenhängend zuweisen, und Sie sollten in der Lage sein, es in einem einzigen fwrite Anruf als

fwrite(three_dim, sizeof *three_dim * outer_dim, 1, temp); 
zu schreiben 210

Sonst ist die Lösung von IMP der richtige Weg.

+0

Wenn ich zwei Antworten akzeptieren könnte. Ich hätte auch deine akzeptiert. – John

Verwandte Themen