Ist es möglich, EOF mit einem normalen Bytewert zu verwechseln, wenn fgetc verwendet wird?
Wir benutzen oftfgetc
so was
int c;
while ((c = fgetc(file)) != EOF)
{
// do stuff
}
Theoretisch, wenn ein Byte in der Datei den Wert @ hEOF
, dieser Code ist fehlerhaft - er unterbricht die Schleife vorzeitig und kann nicht die gesamte Datei verarbeiten. Ist diese Situation möglich?
So weit ich das verstehe,fgetc
wandelt intern ein gelesenes Byte aus der Datei in @ unsigned char
und dann zuint
und gibt es zurück. Dies funktioniert, wenn der Bereich vonint
ist größer als das vonunsigned char
.
Was passiert, wenn es nicht ist (wahrscheinlich dannsizeof(int)=1
)?
fgetc
Liest legitime Daten, die gleich @ sinEOF
aus einer Datei manchmal? Ändert es die Daten, die es aus der Datei liest, um den Einzelwert @ zu vermeideEOF
?Willefgetc
eine nicht implementierte Funktion sein?WilleEOF
von einem anderen Typ sein, wielong
?Ich könnte meinen Code durch eine zusätzliche Überprüfung narrensicher machen:
int c;
for (;;)
{
c = fgetc(file);
if (feof(file))
break;
// do stuff
}
Ist es notwendig, wenn ich maximale Portabilität will?