这个 C 指针错误是什么意思?为什么会这样

时间:2021-01-31 17:43:33

标签: c

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>

typedef uint8_t BYTE;

int main(int argc, char *argv[])
{
    char *block = malloc(BYTE * 512);
    FILE *file = fopen(argv[1], "r");
     
    fclose(argv[1]);
}

我不知道我做错了什么,我还没有开始编写任何实际代码,我是 C 中的指针的新手。我什至没有做任何事情就已经出现错误,我非常对不起。

clang -ggdb3 -O0 -std=c11 -Wall -Werror -Wextra -Wno-sign-compare -Wno-unused-parameter -Wno-unused-variable -Wshadow    recover.c  -lcrypt -lcs50 -lm -o recover
recover.c:9:26: error: unexpected type name 'BYTE': expected expression
    char *block = malloc(BYTE * 512);
                         ^
recover.c:12:12: error: incompatible pointer types passing 'char *' to parameter of type 'FILE *' (aka 'struct _IO_FILE *') [-Werror,-Wincompatible-pointer-types]
    fclose(argv[1]);
           ^~~~~~~
/usr/include/stdio.h:213:26: note: passing argument to parameter '__stream' here
extern int fclose (FILE *__stream);
                         ^
2 errors generated.
make: *** [<builtin>: recover] Error 1

2 个答案:

答案 0 :(得分:0)

代替类型,使用类型的大小

//char *block = malloc(BYTE * 512);
char *block = malloc(sizeof(BYTE) * 512);

更好的是,根本不要使用类型。

char *block = malloc(sizeof *block * 512);

答案 1 :(得分:0)

对于 fclose,您应该传递一个 FILE * 作为参数,对于您的情况,它将是 fclose(file);