Я пытаюсь распечатать все содержимое файла в C, который был сохранен в предыдущей функции.Размер файла был прочитан, и динамическое распределение памяти использовалось соответственно, чтобы создать пространство относительно размера файла.Затем указатель (fp) использовался для указания на вновь выделенное пространство.Затем содержимое файла было прочитано в новое пространство.(Я думаю, что именно здесь моя ошибка).
// gloabl variables
unsigned char *fp = 0; //pointer to navigate through the opened file.
unsigned char *fileStart = 0; // pointer to save the start address of the file, in case you need to go back to start of file
unsigned char fileSize = 0; // stores the size of file
/* Use dynamic memory allocation to store the entire contents of the file and let that memory be pointed by 'fp'.
Save the start of file in 'fileStart' so that you use it to go to start of file in other functions.
After opening the file, read the file size and use it for dynamic memory allocation to read entire file. */
void loadFile(const char *filename)
{
FILE *p = fopen(filename, "rb");
if (p == NULL) {
printf("File not created, errno = %d\n", errno);
return 1;
}
fseek(p, 0, SEEK_END); // seek to end of file
fileSize = ftell(p); // get current file pointer
fseek(p, 0, SEEK_SET); // seek back to beginning of file
printf("File loaded. File size = %#x bytes\n", fileSize);
fp = malloc(fileSize + 1);
fread(fp, fileSize, 1, p);
fileStart = &fp;
fclose(p);
}
/*Display file in hex.
Display neatly the content of the file as seen in hex editor.
Even after closing the file with fclose(), we have the contents of the file in memory pointed by 'fp' (or 'fileStart' in loadFile()).
So you don't have to open and read the file again.*/
void displayBmpFile()
{
printf("Hex view of loaded bmp file: \n");
while(!feof(fileStart))
printf("%d\t", fgetc(fileStart));
}
Я понимаю, что ошибка в моей первой функции.Во-первых, я не уверен, правильно ли хранилось содержимое файла.Если содержимое было сохранено правильно, правильно ли fp указывает на файл?Наконец, если все ранее работало правильно, правильно ли fileStart указывает на начало файла?(Файл представляет собой небольшой шестнадцатеричный файл четырех квадратных цветов).