JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=f64b48668f950f09f17b3cb8192e999dMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

string lässt sich nicht speichern

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
HotAcid
Super JLI'ler


Alter: 43
Anmeldedatum: 04.08.2002
Beiträge: 372
Wohnort: Berlin
Medaillen: Keine

BeitragVerfasst am: 20.10.2003, 13:43    Titel: string lässt sich nicht speichern Antworten mit Zitat

Hallo,

ich habe folgende Struktur:

Code:
struct Spieler
{
   BOOL      bHuman;      // ist der Spieler ein Mensch?
   // char      Name[50];
   string      Name;      // Name des Spielers
   int         Punkte;      // Punktzahl
};


und möchte 10 Elemente "Spieler" aus der Datei "Liste.bin" auslesen, die Methode "Insert" fügt das jeweilige Element dann in eine list<Spieler> ein.

Code:
void CHighscore::Load()
{
   FILE *Datei = fopen("Liste.bin","r");

   Spieler dummy;

   if (NULL != Datei)
   {
      for (int i = 0; i<m_NumberEntries; i++)
      {
         fread(&dummy, sizeof(dummy), 1, Datei);
         Insert(dummy);
      }
   }
fclose(Datei);
}



Es kommt manchmal die Fehlermeldung

"Die Anweisung in "0x..." verweist auf Speicher in "0x...". Der Vorgang "read" konnte nicht auf dem Speicher durchgeführt werden."

Diese Meldung erscheint zweimal, mit jeweils unterschiedlichen Speicherbereichen.

Zu dem "manchmal": Das passiert immer dann, wenn ich die Liste gelöscht habe und das Programm anschließend neu starte. Hier noch die entsprechenden Code-Bereiche:

löschen:
Code:

Spieler dummy;

   dummy.bHuman = FALSE;
   //strcpy(dummy.Name,"abc");
   dummy.Name = "abc";
   dummy.Punkte = 0;

   for (int i=0; i<m_NumberEntries; i++)
   {
      SpielerListe.push_front(dummy);
   }
         
               Save();
               Load();


speichern:
Code:

FILE *Datei = fopen("Liste.bin","w");

   Spieler dummy;
   list<Spieler>::iterator it = SpielerListe.begin();;

   for (int i = 0; i<m_NumberEntries; i++)
   {
      dummy = *it;
      fwrite(&dummy, sizeof(dummy), 1, Datei);
      it++;
   }
   
   fclose(Datei);


bin wieder mal für jeden kleinen Hinweis dankbar!

übrigens: mit "char Name[50]" statt "string Name" geht alles gut...

cu Felix
_________________
StGB §§ 328 Abs. 2 Pkt 3:
Mit Freiheitsstrafe bis zu fünf Jahren oder mit Geldstrafe wird bestraft, wer eine nukleare Explosion verursacht.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 20.10.2003, 13:58    Titel: Antworten mit Zitat

Zitat:

übrigens: mit "char Name[50]" statt "string Name" geht alles gut...


Das ist auch kein Wunder. Woher soll das Programm wissen wo dein String steht oder wie groß er ist? Bei char Name[50]; ist es klar. Es sind 50 Byte ab der Speicherstelle Name. Ein std::string wird dynamisch erstellt. Hier ist sowohl die Größe als auch die Speicheradresse in dem Objekt drin. Das kann nicht gehen.

Christian
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
HotAcid
Super JLI'ler


Alter: 43
Anmeldedatum: 04.08.2002
Beiträge: 372
Wohnort: Berlin
Medaillen: Keine

BeitragVerfasst am: 20.10.2003, 14:08    Titel: Antworten mit Zitat

klingt logisch Wink

dann werde ich das alles doch bei char lassen...

thx
Felix
_________________
StGB §§ 328 Abs. 2 Pkt 3:
Mit Freiheitsstrafe bis zu fünf Jahren oder mit Geldstrafe wird bestraft, wer eine nukleare Explosion verursacht.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 21.10.2003, 13:56    Titel: Antworten mit Zitat

Du brauchst es nicht bei char* lassen:

Code:

ein_ofstream << ein_string;

// fertig

_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
HotAcid
Super JLI'ler


Alter: 43
Anmeldedatum: 04.08.2002
Beiträge: 372
Wohnort: Berlin
Medaillen: Keine

BeitragVerfasst am: 21.10.2003, 16:43    Titel: Antworten mit Zitat

ist der Operator "<<" nicht nur für Konsolenanwendungen?

cu Felix
_________________
StGB §§ 328 Abs. 2 Pkt 3:
Mit Freiheitsstrafe bis zu fünf Jahren oder mit Geldstrafe wird bestraft, wer eine nukleare Explosion verursacht.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
abc_d
JLI Master Trainee


Alter: 34
Anmeldedatum: 27.01.2003
Beiträge: 615

Medaillen: Keine

BeitragVerfasst am: 21.10.2003, 17:06    Titel: Antworten mit Zitat

cout überladet den Operator für sich, wieso sollen das andere nicht auch machen? Übrigens kann man damit auch bitweise verschieben.
_________________
http://mitglied.lycos.de/sarti/linuxisevil.gif Linux is evil - get the fact.

Never touch a running System - der Systemling
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
HotAcid
Super JLI'ler


Alter: 43
Anmeldedatum: 04.08.2002
Beiträge: 372
Wohnort: Berlin
Medaillen: Keine

BeitragVerfasst am: 21.10.2003, 20:17    Titel: Antworten mit Zitat

könnte mir dann nochmal jemand erklären, was ein ofstream ist? und wie löst dieser mein Problem?

thx
Felix
_________________
StGB §§ 328 Abs. 2 Pkt 3:
Mit Freiheitsstrafe bis zu fünf Jahren oder mit Geldstrafe wird bestraft, wer eine nukleare Explosion verursacht.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Cyianor
Super JLI'ler



Anmeldedatum: 23.12.2002
Beiträge: 452

Medaillen: Keine

BeitragVerfasst am: 22.10.2003, 17:16    Titel: Antworten mit Zitat

nur ein kurzer Abschnitt über ofstreams:

http://www.adp-gmbh.ch/cpp/stl_fragments.html

Aber hier wirds genauer beschrieben:

http://ls10-www.cs.uni-dortmund.de/~alfert/cpp/Streams-STL.pdf


Sag mal, verwendest du Google??? Razz Razz
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum