Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 弗瑞德归零_C_File_File Io - Fatal编程技术网

C 弗瑞德归零

C 弗瑞德归零,c,file,file-io,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文件读入内存,并自动分配以适应该文件,但每次我尝试读取文件描述符时,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;
}

有人吗?

您没有在中阅读任何内容,因为您查看了文件的结尾。执行
fseek(fd,0,SEEK\u集)
返回文件开头,然后再执行
fread

如果fread返回零,则文件结尾或出现错误

返回值

fread()和fwrite()返回成功读取的项目数 或 已写入(即,不是字符数)。如果发生错误, 或 到达文件末尾时,返回值为短项计数 (或 零)

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


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

fread
返回零时,您可以使用
feof
ferror
来调查whay。或者,如果您愿意,可以使用rewind()-注意缺少的'f'oh jees,我忘了rewind()。。。我一定是瞎了。非常感谢你指出这一点。