Probleme eine Text-Datei auzulesen.



  • Hallo,
    also ich habe folgendes Problem. Ich habe ein Programm geschrieben, mit welchem ich eine Zeile aus einer Textdatei auslesen möchte.
    Prinzipiell funktioniert das auch, was ich durch ausgabe in ein Textfeld testen wollte. Nur kommt bei gewissen Zeichenanzahlen ein fehlerhafter Text zum vorschein.
    Hier mal mein Code:

    char* inhalt = new char(255);
      int zeichen = 0;
      FILE *fp;
      fp=fopen ("c:\\test.txt","r");
      if (fp == NULL)
      {
         //mach was
      }
      char c;
      do
      {
         c=fgetc (fp);
         if(c!=EOF) inhalt[zeichen] = c;
         zeichen++;
      }
      while (c!=EOF);
      zeichen -= 1;
      fclose (fp);
      WxEdit1->setValue(inhalt);
    

    Speichere ich jetzt den text:

    c:\\abcdefg.bmp

    in die Datei
    wird mir:

    c:\\abcdefg.bmp

    im Textfeld ausgegeben. Bisher Prima!
    Speichere ich jetzt:

    c:\\abcdefgh.bmp

    wird mir folgendes ausgegeben:

    c:\\abcdefgh.bmp?'

    Was suchen die beiden letzten Zeichen da?
    Was mach ich da falsch?

    Danke schonmal für eure Mühe!



  • Dieser Thread wurde von Moderator/in evilissimo aus dem Forum Andere GUIs - Qt, GTK+, wxWidgets in das Forum ANSI C verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • c strings sind null-terminiert.
    guck auf wikipedia oder mit google, was das bedeutet.



  • falls immer noch nicht ausreichend beantwortet....

    while((c=fgetc(fp))!=EOF)
    {
    	gelesenerinhalt[zeichen]=(char)c;
    	zeichen++;
    }
    /* 
    dieses ->'\0'<- ,null terminierter string, muss am ende angefügt werden 
    an die zeichenkette da dann das ende eines stirngs erkannt wird und 
    somit alles was gewollt ist ausgegeben wird
    */
    gelesenerinhalt[zeichen]='\0';
    /* */
    fclose(fp);
    

    egal wann das sollte man immer anfügen wenn man keine zeichen will die eigentlich da nicht hinein gehören (bei der ausgabe von dateiinhalten)...

    mfg
    .*.


Anmelden zum Antworten