c - 结构给我 "expression must be modifiable value"

标签 c arrays struct typedef stdio

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

  1. 有什么问题?
  2. 程序要我添加保存多达 100 万条记录的功能,我假设这是通过具有 EMPLOYEE 结构类型的数组完成的?我会像发送任何其他数组一样将我的 EMPLOYEE 记录变量发送到 EMPLOYEE 数组吗?

我知道“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;
}

最佳答案

语句的问题...

jude.name = "jude";

... 是 jude.name 解析为一个数组(包含 100 个指向 char 的指针)。您可以在声明中初始化数组——这可能看起来像赋值——并且您可以分配给数组元素,但不能分配给整个数组。 p>

至于保存一百万条记录,如果它们必须同时全部存在于内存中(而不是其中一些存在于文件中),那么结构数组是一种可能的选择:

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;

关于c - 结构给我 "expression must be modifiable value",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29079684/

相关文章:

c - 读取 csv 到结构

pointers - 指针的 slice ,当传递给对象时,得到具有其他地址的指针

c - Linux 上的堆栈开始

arrays - 如何在 data.frame 的两列上使用 ggmap 的 revgeocode?

python - Linux:如何模拟接口(interface)上的传入数据包?

arrays - golang中自定义类型数组的替换方法

java - 在单个 for 循环中从一个数组中查找缺少的元素

C++ 在结构中调用类的元素

c - 为什么我必须在控制台屏幕上获得输出之前再输入一个数字?

c - 段错误(核心转储)为 "FILE *pFile;"?