结构给我 "expression must be modifiable value"
Structure giving me "expression must be modifiable value"
我想写一个程序来记录工资单以学习结构,但我发现结构令人困惑我知道它们创建了一个数据类型,你会使用 -> 或。定义它,但我收到了一个错误。 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;
}
问题是您正在尝试更改数组的基地址,这在 C 中是不允许的。数组名称不是可修改的左值。
在您的 Employee 声明中,您可能想要存储一个名字。您当前的声明正在为 100 个字符数组存储 space。您应该将其更改为
char name[100];
这为名称保留 space 最多 99 个字符(+1 为终止空字符)。
然后您可以在其中指定名称,如下所示-
strcpy(name, "jude");
语句有问题...
jude.name = "jude";
... 是 jude.name
解析为一个数组(包含 100 个指向 char
的指针)。您可以在声明中 initialize 数组——这可能看起来像赋值——并且您可以赋值给数组 elements,但您不能赋值到整个数组。
至于保存一百万条记录,如果它们必须同时全部在内存中(而不是其中一些在文件中),那么 structs
的数组是一种可能的选择:
EMPLOYEE employees[1000000];
unsigned employee_count = 0;
您可以像分配任何其他类型一样分配给 struct
s;结果与将右侧 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;
我想写一个程序来记录工资单以学习结构,但我发现结构令人困惑我知道它们创建了一个数据类型,你会使用 -> 或。定义它,但我收到了一个错误。 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;
}
问题是您正在尝试更改数组的基地址,这在 C 中是不允许的。数组名称不是可修改的左值。
在您的 Employee 声明中,您可能想要存储一个名字。您当前的声明正在为 100 个字符数组存储 space。您应该将其更改为
char name[100];
这为名称保留 space 最多 99 个字符(+1 为终止空字符)。
然后您可以在其中指定名称,如下所示-
strcpy(name, "jude");
语句有问题...
jude.name = "jude";
... 是 jude.name
解析为一个数组(包含 100 个指向 char
的指针)。您可以在声明中 initialize 数组——这可能看起来像赋值——并且您可以赋值给数组 elements,但您不能赋值到整个数组。
至于保存一百万条记录,如果它们必须同时全部在内存中(而不是其中一些在文件中),那么 structs
的数组是一种可能的选择:
EMPLOYEE employees[1000000];
unsigned employee_count = 0;
您可以像分配任何其他类型一样分配给 struct
s;结果与将右侧 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;