Почему содержимое двоичного файла не печатается на c?

#c

#c

Вопрос:

Здравствуйте, я пишу программу, которая считывает содержимое двоичного файла и выводит его на экран.

   #include <stdio.h> 
 #include <stdlib.h> // For exit() 

 int main() 
 { 
FILE *fptr; 

char filename[100];


printf("Enter the filename to open n"); 
scanf("%s", filename); 

// Open file 
fptr = fopen(filename, "rb"); 
if (fptr == NULL) 
{ 
    printf("Cannot open file n"); 
    exit(0); 
} 

// Read contents from file
fseek(fptr,0L,SEEK_END); 
int fsize = ftell(fptr);
fseek(fptr,0L,SEEK_SET); 
unsigned char  *c = malloc(fsize);
fread(c,fsize,1,fptr); 
fclose(fptr); 
printf("%s",c);

return 0; 
}
  

но это ничего не печатает.Может кто-нибудь объяснить мне, почему и как я должен решить эту проблему.

Комментарии:

1. В конечном итоге вы будете печатать непечатаемые символы. Некоторые из этих символов имеют побочный эффект. Преобразуйте каждый символ в unsigned int и распечатайте его в шестнадцатеричном формате.

2. @kaylum Вы правы. Я ошибочно предположил, что размер элемента равен единице. (1 байт на символьный элемент и n символов). Это больше соответствовало бы подписи fread. Удалил мое замечание. Спасибо за исправление.

Ответ №1:

То, что вы пытались, совсем не то, чего вы хотели достичь.

Не забывайте printf() форматировать данные, которые он печатает. Для правильной печати с %s форматированием значения двоичных данных должны быть значениями ASCII, но, конечно, это не так.

Вероятно, вам следует попытаться printf() с %d помощью.

Комментарии:

1. Спасибо, приятель. Просто создал цикл for и напечатал их с %x, поскольку я хотел шестнадцатеричные значения.

2. Добро пожаловать, Атхарва. Помните, что %o и %x отформатированные данные форматируются как беззнаковые восьмеричные и шестнадцатеричные соответственно. Кроме того, если мой ответ помог вам сориентироваться, пожалуйста, поддержите!