我有这个结构
typedef struct STUDENT
{
char studName[20];
int timeEnter;
int timeUpdate;
}STUDENT;
和结构数组的本地指针
STUDENT *studArr[100];
我正在尝试通过在文件的第一行读取来为结构分配内存,然后使用它为结构分配内存。
fscanf(fp, "%s", &first);
**studArr = (STUDENT**) malloc(sizeof(STUDENT*)*first);
我得到一个错误,说没有运算符“=”匹配分配行上的这些操作数
为什么我会收到错误,我在这里做错了什么?
提前谢谢
答案 0 :(得分:3)
我认为你是混乱的东西,看起来你正在声明一个指针数组,当你需要的只是一个指针。请注意,只要您正确编制索引,指向“一”struct
的指针与指向一百的指针相同。
你可能应该:
STUDENT *studArr;
然后,一旦你知道你需要多少(我假设first
是分配空间的学生人数):
studArr = malloc(first * sizeof *studArr);
另请注意no casting is needed。
答案 1 :(得分:1)
如果您想分配100名学生的数组,您有两种选择:
struct STUDENT
{
char studName[20];
int timeEnter;
int timeUpdate;
};
struct STUDENT studArr1[100];
... OR ...
struct STUDENT *studArr2 = (struct STUDENT *)malloc (sizeof (struct STUDENT) * 100);
如果你只想要一个指针,你可以说:
struct STUDENT *p = studArr1;
PS:
我特意留下了“typedef”的东西,以免混淆基本问题(struct与struct的数组与指向struct数组的指针)。
答案 2 :(得分:0)
您已经定义了一个指向struct的指针数组,而不是指向struct数组的指针。数组的内存已作为全局数组分配。
**studArr
的类型是STUDENT,因此与赋值运算符右侧的表达式不兼容,该运算符已转换为(STUDENT**)
。
你可能意味着:
STUDENT **studArr;
[...]
fscanf(fp, "%s", &first);
studArr = (STUDENT**) malloc(sizeof(STUDENT*)*first);
答案 3 :(得分:0)
当你使用STUDENT * studArr [100];那就意味着你为STUDENT结构类型分配了100个指针的内存。
所以为了分配内存,你应该尝试。
studArr =malloc(sizeof(struct STUDENT)*first);
然后您可以将所有已分配的成员作为studArr[i] ....so on
访问。
答案 4 :(得分:0)
你并不清楚你的总体目标是什么。
首先,如果要读取整数,则需要使用%d
:
int count;
if (fscanf(fp, "%d", &count) != 1) { // error... }
接下来,不要将STUDENT
用作struct name和typdef。只需保留结构名称:
typedef struct
{
char studName[20];
int timeEnter;
int timeUpdate;
} student_t;
现在,您只想要一个指向student_t
s:
student_t* student_array = NULL;
最后,分配该数组:
student_array = malloc(count * sizeof(student_t));
现在您可以使用它,例如:
strncpy(student_array[0].studName, "Bobby", 20);
或者获得指向个别学生的指针:
student_t* bob = &student_array[1];
bob->timeEnter = 42;