1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Daten aus Datei lesen

Dieses Thema im Forum "C/C++" wurde erstellt von Carpocalypse, 21. August 2004.

  1. Carpocalypse

    Carpocalypse Mitglied

    Hi,

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

    Code (Text):
    1. int anzahl;
    2. char *vname;
    3. FILE *stream;
    4. stream=fopen("name.liz", "r");
    5. fseek(stream,0,SEEK_SET);
    6. fread(&anzahl,sizeof (anzahl),1,stream);
    7. vname=new char[anzahl];
    8. fseek(stream,4,SEEK_SET);
    9. fread(&vname,sizeof (*vname),1,stream);
    10. fclose(stream);
    11. 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.
     
  2. Kachelator

    Kachelator Peter Jerz

    Code (Text):
    1. 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 (Text):
    1. vname=new char[anzahl+1];           // mit platz für schlussnull
    2. //fseek( stream, 4, SEEK_SET );     // könnte überflüssig oder schädlich sein
    3. fread( vname, anzahl, 1, stream );  // anzahl der zeichen lesen
    4. 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.
     
  3. RabeDev

    RabeDev Grünschnabel

    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!)
     
Die Seite wird geladen...