fread返回零

时间:2010-07-28 22:06:31

标签: c file file-io

我有一个函数将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 个答案:

答案 0 :(得分:12)

您没有阅读任何内容,因为您fseek已编辑到文件的末尾。在fseek(fd, 0, SEEK_SET);之前,请fread返回文件的开头。

答案 1 :(得分:1)

如果fread返回零,则 文件结尾发生错误。

  

返回值

     

fread()和fwrite()返回成功读取的项目数   要么          书面(即不是字符数)。如果发生错误,   要么          到达文件结尾,返回值是一个短项目计数   (要么          零)。

     

fread()不区分文件结束和错误,以及   呼叫者          必须使用feof(3)和ferror(3)来确定发生了什么。

我建议您检查文件是否有错误,如果发生错误,您应该打印相关的错误消息以获取更多信息!这应该是您当前调试的一部分,也应该是已完成代码的错误处理。