将整个文件读入堆上分配的区域

时间:2018-02-07 12:46:04

标签: c fread

我试图通过命令行参数打开并读取两个bmp文件。在malloc大小为char *之后我迷路了,fread()不能很好地工作。我的代码有什么问题

这就是我所拥有的:

void processFileDate(int a, char  **argv, unsigned long size) {

    if(a != 3)
        return;
    FILE *f1;
    FILE *f2;
    f1 = fopen(*++argv,"rb");
    f2 = fopen(*++argv,"rb");
    if(f1 == NULL || f2 == NULL) {
        printf("Can not open file \n");
        return;
    }
    unsigned char *p1 = (unsigned char*)malloc(size + 1);
    unsigned char *p2 = (unsigned char*)malloc(size + 1);

    fread(&p1, 1, size, f1);
    fread(&p2, 1, size, f2);

2 个答案:

答案 0 :(得分:1)

查看函数fread()的签名:

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);

如您所见,它的第一个参数是指针。在您的代码中,您将p1p2定义为unsigned char的指针,但您将其地址传递给fread()。这是错的;你应该按值传递它们,如下所示:

fread(p1, 1, size, f1);
fread(p2, 1, size, f2);

答案 1 :(得分:0)

fread需要一个void * ptr,而不是一个void ** ptr:

if(a != 3)
    return;
FILE *f1;
FILE *f2;
f1 = fopen(*++argv,"rb");
f2 = fopen(*++argv,"rb");
if(f1 == NULL || f2 == NULL) {
    printf("Can not open file \n");
    return;
}
unsigned char *p1 = (unsigned char*)malloc(size + 1);
unsigned char *p2 = (unsigned char*)malloc(size + 1);



fread(p1, 1, size, f1);
fread(p2, 1, size, f2);