É possível confundir EOF com um valor normal de bytes ao usar o fgetc?
Costumamos usarfgetc
como isso:
int c;
while ((c = fgetc(file)) != EOF)
{
// do stuff
}
Teoricamente, se um byte no arquivo tiver o valor deEOF
, esse código é incorreto - ele interrompe o ciclo mais cedo e falha ao processar o arquivo inteiro. Esta situação é possível?
Tanto quanto eu entendo,fgetc
lança internamente uma leitura de bytes do arquivo paraunsigned char
e depois paraint
e retorna. Isso funcionará se o intervalo deint
é maior que o deunsigned char
.
O que acontece se não for (provavelmente entãosizeof(int)=1
)?
fgetc
ler dados legítimos iguais aEOF
de um arquivo às vezes?Isso alterará os dados lidos no arquivo para evitar o valor únicoEOF
?Vaifgetc
ser uma função não implementada?VaiEOF
ser de outro tipo, comolong
?Eu poderia fazer meu código à prova de falhas com uma verificação extra:
int c;
for (;;)
{
c = fgetc(file);
if (feof(file))
break;
// do stuff
}
É necessário se eu quiser a portabilidade máxima?