В настоящее время я пытаюсь прочитать файл PNG, по одному байту за раз, и получаю разные результаты, когда использую fread((void*), size_t, size_t, FILE*)
и fgetc(FILE*)
.
Я, по сути, хочу «читать по одному байту за раз до конца файла», и я делаю это двумя разными способами. В обоих случаях я открываю нужное изображение в двоичном режиме через:
FILE* input = fopen( /* Name of File */, 'rb');
И хранить каждый байт в символе char c
Фред: while( fread(&c, 1, 1, input) != 0) //read until there are no more bytes read
fgetc:
while( (c = fgetc(input)) != EOF) //Read while EOF hasn't been reached
В случае fread
я прочитал все байты, которые мне нужно сделать. Функция чтения останавливается в конце файла, и я в итоге печатаю все 380 000 байтов (что имеет смысл, поскольку входной файл - это файл размером 380 КБ).
Однако в случае fgetc
я останавливаюсь, как только достигаю байта со значением ff
(что равно -1, значение макроса EOF
.
У меня такой вопрос: если обе функции выполняют одно и то же, читая по одному байту за раз, как fread узнает, что продолжает читать, даже если встречается байт со значением EOF
? И, исходя из этого, как fread узнает, когда останавливаться, если при чтении файла передается EOF
?