传递 'fgets' 的参数 1 使指针来自 int 而无需强制转换

passing argument 1 of 'fgets' makes pointer from int without a cast

我正在用 C 编写银行管理系统。当我 运行 这段代码时,它给我这个错误

passing argument 1 of 'fgets' makes pointer from integer without a cast

fgets 是否只获取 ```char*``?

这是导致错误的函数

void create_new(void)
{
    system("clear");
    puts("Answer the questions to make a account");

    printf("Enter your full name: ");
    fgets(new_acc.name, 80, stdin);

    printf("Enter your name with initials");
    fgets(new_acc.initials, 50, stdin);

    printf("Enter your birthday (mm/dd/yyyy): ");
    scanf("%d %d %d", &new_acc.birth_day.mm, &new_acc.birth_day.dd, &new_acc.birth_day.yyyy);

    printf("Enter your address: ");
    fgets(new_acc.address, 80, stdin);

    printf("Enter your id number: ");
    scanf("%10[0-9a-zA-Z]", new_acc.id_num);

    printf("Enter your occupation: ");
    scanf("%24s", new_acc.occupation);

    printf("Enter your email address: ");
    scanf("%s", new_acc.email);

    printf("Enter your phone number: ");
    scanf("%s", new_acc.phone);

    printf("Enter the account type:\n");
    printf("\t#Saving\n\tFixed (1 year)\n\tFixed (2 year)\n\tFixed (3 year)\n");
    scanf("%10s", new_acc.acc_type);


    printf("%s\n", new_acc.name);
    printf("%s\n", new_acc.initials);
    printf("%d %d %d", &new_acc.birth_day.mm, &new_acc.birth_day.dd, &new_acc.birth_day.yyyy);
    printf("%s\n", new_acc.address);
    printf("%s\n", new_acc.id_num);
    printf("%s\n", new_acc.occupation);
    printf("%s\n", new_acc.email);
    printf("%d\n", new_acc.phone);
    printf("%s\n", new_acc.acc_type);
}

这是我的函数结构

struct date{  // structure for dates
    int mm, dd, yyyy;
};

struct {
    char* initials, name, address, email, acc_type; // these variables won't change
                                                     // so I use char*
    int bday;
    char id_num[11];
    char occupation[25];
    int phone;
    struct date birth_day;  // structure for birth day    
} new_acc;

我不能使用 scanf 因为它不允许空格

new_acc 结构中的行 char* initials, name, address, email, acc_type;initials 声明为 char*(指向 char 的指针)变量和其他(nameaddressemailacc_type) 作为简单的 char 变量。您需要在 each 之前加上 * 以使它们中的每一个都成为指针。

此外,在您显示的代码中,您从未为(甚至)initials 成员分配任何内存,因此它将是指向无效位置的未定义指针。您需要:(a) 使用对 malloc 的调用为每个指针分配一些内存;或 (b) 将这些成员声明为 char arrays,其中 space 表示其字符串的最大预期大小,就像您对 id_num 所做的那样和 occuptaion.