фред возвращает ноль - PullRequest
1 голос
/ 29 июля 2010

У меня есть функция, которая считывает файл rom в память и автоматически распределяет его по размеру файла, но каждый раз, когда я пытаюсь прочитать из дескриптора файла, fread () возвращает ноль.Я не уверен, что я делаю неправильно.кто-нибудь может помочь?

int read_rom(const char *filename, unsigned char ***rom) {
    int rom_size;
    FILE *fd = NULL;

    if((fd = fopen(filename, "r")) != NULL) {
        fseek(fd, 0, SEEK_END);
        rom_size = ftell(fd);
        (*rom) = malloc(rom_size);
        int read = fread(rom, 1, rom_size, fd);
        fclose(fd);

        printf("read: %d\n", read);

        return rom_size;
    }

    return -1;
}

int main(int argc, char **argv) {
    unsigned char rom_size = 0;
    unsigned char **rom = NULL;
    rom_size = read_rom(argv[1], &rom);

    return 1;
}

Любой берущий?

Ответы [ 2 ]

12 голосов
/ 29 июля 2010

Вы ничего не читаете, потому что вы fseek отредактировали конец файла.Сделайте fseek(fd, 0, SEEK_SET);, чтобы вернуться к началу файла перед вами fread.

1 голос
/ 29 июля 2010

Если fread возвращает ноль, то либо из Конец файла , либо произошла ошибка.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

fread () и fwrite () возвращают количество успешно прочитанных или записанных элементов (т. е. не количество символов).Если возникает ошибка или достигается конец файла, возвращаемое значение представляет собой короткий счетчик элементов (или ноль).

fread () не различает конец файла и ошибку, ивызывающие абоненты должны использовать feof (3) и ferror (3), чтобы определить, что произошло.

Я предлагаю вам проверить наличие ошибок в файле, и если произошла ошибка, вы должны распечатать соответствующее сообщение об ошибке.чтобы получить больше информации!Это должно быть частью как вашей текущей отладки, так и готового кода как обработки ошибок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...