赋予我"表达的结构必须是可修改的值"

时间:2015-03-16 14:44:29

标签: c arrays struct typedef stdio

我想要编写一个程序,记录工资单以学习结构,但我发现结构令人困惑,我知道他们创建了一个数据类型,你会使用 - >要么。定义,但我收到一个错误。 2个问题,

  1. 问题是什么?
  2. 该程序要求我添加保存多达100万条记录的能力,我认为这是通过具有EMPLOYEE结构类型的数组完成的?我是否只需将我的EMPLOYEE记录变量发送到EMPLOYEE数组中,就像其他任何数组一样?
  3. 我知道“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;
    }
    

2 个答案:

答案 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;