Verständnisproblem: End Of File

Gast #2724509
Hi,
ich lese auf meinem PC eine Datei mit C ein. Das Prinzip sieht so aus:
1
while(byte != EOF)
2
{
3
   byte = getc(input);
4
   ...
5
}

input ist hier ein File-Pointer, und byte ein char. Das Problem: Wenn 
nun ein Byte in der Datei den gleichen Wert wie EOF enthält, terminiert 
die Schleife ungewollt, sie soll bis zum Dateiende durchlaufen. Gibt's 
da Möglichkeiten, dass zu verhindern?

MfG
HiHel
Hilfreicher Helfer schrieb:

> die Schleife ungewollt, sie soll bis zum Dateiende durchlaufen. Gibt's
> da Möglichkeiten, dass zu verhindern?

getc liefert aus gutem Grund einen int und keinen unsigned char
Damit KANN kein Byte in deinem File denselben Wert haben.
Du musst getc in einen int einlesen lassen und nur dann, wenn das nicht 
gleich mit EOF ist, erst dann kannst du das in Form eines unsigned char 
verwenden.
1
  int c;
2

3
  while ((c = fgetc(ptr)) != EOF)
4
  {
5
    ... mach was mit c
6
  }

Siehe zum Beispiel
Kernighan&Ritchie
Programmieren in C

irgendwo ganz am Anfang des Buches, wenn es das erste mal ums Lesen aus 
einem Stream geht.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.