#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
отформатированные данные форматируются как беззнаковые восьмеричные и шестнадцатеричные соответственно. Кроме того, если мой ответ помог вам сориентироваться, пожалуйста, поддержите!