我想要编写一个程序,记录工资单以学习结构,但我发现结构令人困惑,我知道他们创建了一个数据类型,你会使用 - >要么。定义,但我收到一个错误。 2个问题,
我知道“jude.name”是问题所在,不确定原因。
#include <stdio.h>
#include <stdlib.h>
#define MAX 1000000
typedef struct{
int day;
int month;
int year;
}DATE;
typedef struct Employee{
char *name[100];
int *age;
float *hrsWorked;
float *regPay;
float *otPay;
float *totalPay;
DATE payDate;
}EMPLOYEE;
void recordManager();
int main(){
DATE today;
DATE tp;
EMPLOYEE jude;
EMPLOYEE jp;
jude.name = "jude";
system("pause");
return 0;
}
答案 0 :(得分:2)
问题是您正在尝试更改数组的基址,这在C中是不允许的。数组名称不是可修改的左值。
在您的员工声明中,您可能希望存储一个名称。您当前的声明是存储100个字符数组的空间。你应该把它改成
char name[100];
这为名称保留了最多99个字符的空间(终止空字符为+1)。
然后您可以在其中指定名称 -
strcpy(name, "jude");
答案 1 :(得分:2)
声明的问题......
jude.name = "jude";
...是jude.name
解析为一个数组(指向char
的100个指针)。您可以在声明中初始化数组 - 并且看起来像一个赋值 - 并且您可以分配给数组元素,但不能分配给整个数组。
至于保留一百万条记录,如果它们必须同时存在于内存中(相反,对于它们中的一些存在于文件中),那么structs
数组就是一种可能的选择:
EMPLOYEE employees[1000000];
unsigned employee_count = 0;
您可以将struct
分配给任何其他类型;结果与将右手struct
的每个字段分配到左侧struct
的相应字段相同。例如:
EMPLOYEE one_employee;
/* ... initialize one_employee ... */
employees[employee_count++] = one_employee;
数组是否是一个合理的数据结构,以及这种分配方式是否适合您的目的,取决于您的程序应该做的记录。
另请注意,您可能不希望您的结构成员成为指针,除了可能name
(在这种情况下,您肯定只需要一个指针,而不是它们的数组):
typedef struct Employee{
char name[100];
int age;
float hrsWorked;
float regPay;
float otPay;
float totalPay;
DATE payDate;
} EMPLOYEE;