传递 '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 的指针)变量和其他(name
, address
、email
和 acc_type
) 作为简单的 char
变量。您需要在 each 之前加上 *
以使它们中的每一个都成为指针。
此外,在您显示的代码中,您从未为(甚至)initials
成员分配任何内存,因此它将是指向无效位置的未定义指针。您需要:(a) 使用对 malloc
的调用为每个指针分配一些内存;或 (b) 将这些成员声明为 char
arrays,其中 space 表示其字符串的最大预期大小,就像您对 id_num
所做的那样和 occuptaion
.
我正在用 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 的指针)变量和其他(name
, address
、email
和 acc_type
) 作为简单的 char
变量。您需要在 each 之前加上 *
以使它们中的每一个都成为指针。
此外,在您显示的代码中,您从未为(甚至)initials
成员分配任何内存,因此它将是指向无效位置的未定义指针。您需要:(a) 使用对 malloc
的调用为每个指针分配一些内存;或 (b) 将这些成员声明为 char
arrays,其中 space 表示其字符串的最大预期大小,就像您对 id_num
所做的那样和 occuptaion
.