我试图通过命令行参数打开并读取两个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);
答案 0 :(得分:1)
查看函数fread()
的签名:
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
如您所见,它的第一个参数是指针。在您的代码中,您将p1
和p2
定义为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);