2016-11-25 2 views
0

Я пытаюсь читать в 256 байтах в буфер из файла размером 65536 байт, рассматривая его как файл с произвольным доступом, используя fopen, fread, fwrite и fseek. Я не получаю никаких ошибок, но после чтения буфер остается пустым, хотя файл не является пустым, а исправленные отчеты читают 256 байтов. Вот мой код:fread в буфер пуст, несмотря на непустой файл

FILE *file = NULL; 
    char buffer[255]; 
    memset(buffer, 0, sizeof(buffer)); 

    file = fopen("BACKING_STORE.bin","r"); 

    if(file == NULL) { 
      printf("Error: can't open file.\n"); 
      return NULL; 
    } // end if 

    if(fread(buffer, 1, 256, file) != 256) { 
      printf("Error: reading from file failed.\n"); 
      return NULL; 
    } // end if 

    printf("The bytes read are [%s]\n", buffer); 

    fclose(file); 

И только, чтобы подтвердить, что я открыл файл BACKING_STORE.bin в шестнадцатеричном редакторе, просто чтобы убедиться, что она не была пуста. Вот скриншот этого: enter image description here

После запуска этой программы я получаю вывод: «Чтение байтов - []», но без ошибок.

Я довольно новичок в C, поэтому я уверен, что это просто что-то простое, что мне не хватает.

Спасибо за помощь. :)

+2

Неопределенное поведение: ваш буфер 255 байт, но вы читаете 256. – Olaf

ответ

2

Поскольку вы не можете выводить двоичные данные с "%s" и printf(). Если вы хотите увидеть содержимое, вы можете написать цикл и напечатать шестнадцатеричное значение каждого байта, как это

for (size_t i = 0 ; i < 256 ; ++i) { 
    fprintf(stdout, "0x%02x ", buffer[i]); 
    if ((i + 1) % 8 == 0) { 
     fputc('\n', stdout); 
    } 
} 
Смежные вопросы