чтение файла изображения в массив символов - PullRequest
1 голос
/ 02 мая 2011

Я пытаюсь прочитать кучу файлов в массив символов, у меня есть следующий код

FILE* file = fopen("...","rb");
//some error checking stuff
fseek(file, 0, SEEK_END);
long len=ftell(file);
fseek(file, 0, SEEK_SET);           
char* content=(char *)malloc(len+1);
memset(content,0,len+1);
fread(content, len, 1, file);

Я проверил это с помощью текстового файла, и это, кажется, работает.Я получаю содержимое файла в моем массиве, и все хорошо.но если этот код работает с файлом изображения (я тестировал pngs и jpegs), кажется, что он читает только первые несколько байтов файла.Я что-то упускаю здесь?

1 Ответ

0 голосов
/ 24 июня 2011

Если вы посмотрите на определение фреда , то ваш фред не сможет вернуть только первые несколько байтов, так как вы поместили len в поле размера и пропустили счет 1. Это означает, что фред либо вернет 1 при успешном чтении длинных байтов, либо не прочитает ни одного байта. Если вы поменяете параметры, то fread прочитает столько байтов, сколько сможет, и вернет, сколько байтов фактически прочитано (должно быть передано в случае успеха).

Также обратите внимание, что выполнение memset 0 и последующее фрединг неэффективны, если только вы не потребуете обнуление массива при сбое (случай ошибки должен означать, что вам это не нужно). Лучший подход к добавлению нулевого терминатора (как вы делаете для обычных файлов):

content[len] = '\0';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...