Daten aus Datei lesen

Carpocalypse

Mitglied
Hi,

ich möhte mir aus einer Datei einen Name anzeigen lasen, dies funktioniert aber irgendwie nicht.

Code:
int anzahl;
char *vname;
FILE *stream;
stream=fopen("name.liz", "r");
fseek(stream,0,SEEK_SET);
fread(&anzahl,sizeof (anzahl),1,stream);
vname=new char[anzahl];
fseek(stream,4,SEEK_SET);
fread(&vname,sizeof (*vname),1,stream);
fclose(stream);
Vorname->Text=*vname;

das auslesen der Anzahl funktioniert einwandfrei nur beim Vornamen schreibt er irgendwelche wirren Zeichen hin. Ich hoffe ihr könnt mir helfen.
 
Code:
fread(&vname,sizeof (*vname),1,stream);
vname ist bereits der Zeiger auf dein char-Array, deshalb darfst du da kein '&' vormachen -- das steht dann nämlich für einen Zeiger auf den Zeiger. Ausserdem solltest du als zweiten Parameter die Anzahl übergeben. Übrigens wäre es gut, das char-Array etwas grösser zu machen und eine Schlussnul dranzuhängen, damit es ein "C-String" wird:
Code:
vname=new char[anzahl+1];           // mit platz für schlussnull
//fseek( stream, 4, SEEK_SET );     // könnte überflüssig oder schädlich sein
fread( vname, anzahl, 1, stream );  // anzahl der zeichen lesen
vname[anzahl] = (char)0;            // schlussnull setzen

Da fällt mir noch ein: Das fseek() sollte eigentlich überflüssig sein, weil fread() den Filepointer ohnehin weiterbewegt. Lass es mal weg, falls es so nicht klappt.

Hast du dir mal überlegt, mit filestreams zu arbeiten? (std::ifstream, std::eek:fstream) Das ist empfehlenswert.
 
Alternative

Solltest Du eine reine Textdatei einlesen wollen (wonach es fuer mich aussieht), dann geht's aber auch einfacher. Probier's doch mal mit "getc()", mit der Du ein zeilenweises Einlesen bspw. so implementieren koenntest

int getline(FILE *stream, char *buf)
{
int p, i=0;

do
{
p = fgetc(stream);
buf[i++] = (char) p;
}
while ((p != EOF) && ((char) p != '\n'));

buf[i-1] = '\0';
return p;
}

Oder Du nimmst gleich "fgets()" ... -> siehe:
http://msdn.microsoft.com/library/d...ry/en-us/vclib/html/_crt_fgets.2c_.fgetws.asp

(Oder - solltest Du C++ schreiben - schau Dich mal im iostream-Umfeld oder ggf. der MFC um. Da gibt es noch weitere "modernere" (?) Varianten. C-Funcs sind aber schon okay!)
 
Zurück