2dimensionals Array, verpointet?!



  • Hi
    Ich habe mir ein Programm geschrieben, das ein 2dimensionales Array binär in eine Datei schreibt.
    Wenn ich die Datei dann binär lade und das 2dimensionales Array fülle, bekomme ich im Hauptprogramm nur irgendwelche Zeichen zu sehen, vergleichbar mit den Zeichen die man sieht wenn man einen String ausgiebt ohne Endezeichen.
    Code schaut folgendermaßen aus:

    #include <iostream>
    #include <stdlib.h>
    #include <stdio.h>
    
    /*
    *Feste Größe des Char Feldes in dem
    *der Highscore gespeichert wird
    */
    #define max_items 10
    
    typedef char t_cfield[40];
    
    //Lädt die Scoredaten
    int load_score(t_cfield *score) 
    { 
      FILE *readfile; 
      int size;  
    
      size=sizeof(score); 
      readfile=fopen("score.cfg","r+b"); 
      fread(&score,1,size,readfile); 
      fclose(readfile); 
      cout<<endl<<"Werte im Unterprogramm :"<<endl; 
      for (int i=0;i<10;i++) 
      { 
      cout<<score[i]<<endl; 
      }
    }
    
    using namespace std;
    int main(int argc, char *argv[])
    {
      t_cfield test[max_items];
      t_cfield laden[max_items];
    
      strcpy(test[0],"9");
      strcpy(test[1],"8");
      strcpy(test[2],"7");
      strcpy(test[3],"6");
      strcpy(test[4],"5");
      strcpy(test[5],"4");
      strcpy(test[6],"3");
      strcpy(test[7],"2");
      strcpy(test[8],"1");
      strcpy(test[9],"0");
    
      for (int i=0;i<10;i++)
      {
      cout<<test[i]<<endl;
      }
    
      save_score(test);
      load_score(laden);
      cout<<endl<<"Aus Datei geladen"<<endl;
    
      for (int i=0;i<10;i++)
      {
      cout<<laden[i]<<endl;
      }
    
      system("PAUSE");	
      return 0;
    }
    

    Das bekomme ich dann zu sehen
    1. Block ist direkt nach dem deklarieren
    2. Block ist nach dem Laden aus der Datei im Unterprogramm
    3. irgenwas Block ist Ausgabe in main

    Was muss ich nun ändern damit ich die Daten aus der Datei im Hauptprogramm nutzen kann?
    mfg



  • T0mmy schrieb:

    int load_score(t_cfield *score) 
    { 
      FILE *readfile; 
      int size;  
     
      size=sizeof(score); 
      readfile=fopen("score.cfg","r+b"); 
      fread(&score,1,size,readfile); 
      fclose(readfile); 
      cout<<endl<<"Werte im Unterprogramm :"<<endl; 
      for (int i=0;i<10;i++) 
      { 
      cout<<score[i]<<endl; 
      }
    }
    

    deine 'size'-variable macht nur den quelltext unleserlicher.
    und fread war ganz falsch

    fread(score, sizeof(tc_field), 1, readfile);
    

    überhaupt glaube ich, du lernst mit dem falschen buch. Der ganze Code ist schon ziemlich daneben mit der Mischung aus C und C++ Funktionen.



  • Naja ist mein 1. Versuch mit binärer Datenverarbeitung
    Die ganzen cout´s kommen natürlich raus, sind atm nur zum debugging
    Wenn ichs jetzt so mache wie oben beschrieben, dann zeigt er die Variablen im Unterprogramm auch korrekt an, so wie vorher auch aber im Hauptprogramm ist alles wieder vermurkst.
    Er verhaut mir da irgenwas auf dem Weg vom Unterprogramm ins Hauptprogramm

    Würde es Sinn machen die Variable in ne Struktur zu packen und im Unterprogramm dann zurückzugeben?
    Meckert der Compiler dann noch das ich ein Feld zurück geben will?

    e:
    Ich hab jetzt das Laden Feld auf 0 initialisiert, mit dem Ergebnis das er im Unterprogramm korrekt ladet und in main die 0en ausgibt.
    Ich hab da jetzt ein Verständnisproblem, ich übergebe ja per Pointer und das bedeutet "call by reference" also müsste sich die Variable ja auch im main ändern


Anmelden zum Antworten