PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Input.read(); verursacht Fehlermeldung?



DoS
17.09.2009, 19:50
Hallo,
ich habe folgendes Problem:

Wenn man das hier kompiliert und zweimal ausführt , kommt beim zweiten Mal eine Fehlermeldung (bzw. beim Input lesen kommt es zur Fehlermeldung). Wieso ist das so und wie kann man das ändern?
(Bitte nicht wundern, dass so viel eingebunden ist. Das liegt daran, dass ich sehr viel gekürzt habe)
:



/*, vector<string>::iterator i*/
#include <iostream>
#include <windows.h>
#include <string>
#include <fstream>
#include <vector>
#include <stdlib.h>
#include <stdio.h>


using namespace std;


int main()
{


vector<string> Daten;
vector<string>::iterator i;


ifstream Input("RememberSpeicher.cfg", ios::binary);



if(Input==0)
{
Input.close();

}

else
{


Input.read((char*) &Daten, sizeof(Daten));
Input.close();
cout<<Daten[0];
char grob;
cin>>grob;
}

Daten.push_back("bla");

ofstream Output("RememberSpeicher.cfg", ios::binary);






Output.write((char*)&Daten, sizeof(Daten));
Output.close();



return 0;


}




Gruß DoS

inout
17.09.2009, 20:21
So weit ich weiss geht sowas nur mit POD (Plain Old Data) Datentypen.
Also mit Datentypen, die eine feste Größe besitzen.
Und da das bei einem std::string nicht der Fall ist, kann man den auch nicht direkt in einen vector einlesen.

Um sowas zu machen brauchst du also einen festen oder fixen Datentyp für deinen vector z.B.: char.

DoS
18.09.2009, 13:25
Ich werde es ausprobieren. Toll, jetzt kann ich wieder alles austauschen... :D

Gibt es denn keine andere Möglichkeiten?

MfG. -DoS

blackberry
18.09.2009, 13:50
Ja: alles austauschen.

btw: ein Vector von chars dürfte auch nicht funktionieren, da &meinCharVector auf das Objekt und nicht auf freien Speicher für Zeichen (chars) zeigt!

Was du brauchst ist ein Array (ich sage jetzt absichtlich nicht char-Array, da einige mir dann vielleicht erzählen wollen, dass man Strings *theoretisch* auch in z.B. int-Arrays speichern kann, aber da C-Strings nunmal char's benutzen passt das besser).
Willst du keinen Array benutzen, solltest du einen char-Zeiger (char *) erstellen und mit malloc/new genug Speicher reservieren (obwohl das im Grunde das selbe ist wie mit den Arrays... Zeiger und Arrays sind in C(++) eben sehr verwandt)

Alles was du einliest also als char whatever[genug_platz] deklarieren.

Achso und:
Wenn du auf der Suche nach Fehlern bist empfiehlt sich sowas:
printf("- %d@%s\n", __LINE__, __FILE__);
nach jeder effektiven Zeile Code in dem Fehleranfälligen Bereich zu platzieren.
Dann weißt du ganz schnell, wo der fehlerhafte Code steckt.


mfG. BlackBerry