繁体   English   中英

动态分配内存以指向结构数组的指针

[英]dynamically allocate memory for pointer to array of structure

嗨,我有这个结构

typedef struct STUDENT
{
    char studName[20];
    int timeEnter;
    int timeUpdate;
}STUDENT;

和指向结构数组的本地指针

STUDENT *studArr[100];

我正在尝试通过在文件的第一行中读取内容来为结构分配内存,然后使用它为结构分配内存。

fscanf(fp, "%s", &first);
**studArr = (STUDENT**) malloc(sizeof(STUDENT*)*first);

我收到一个错误消息,说没有运算符“ =”与分配行上的这些操作数匹配

为什么我得到错误,我在这里做错了什么?

预先感谢

我认为您感到困惑,看起来您在声明一个指针数组,而您所需的只是一个指针。 请注意,只要索引正确,指向“一个” struct的指针就等于指向100的指针。

您可能应该具有:

STUDENT *studArr;

然后,一旦您知道您需要多少(我first假设是要分配空间的学生数量):

studArr = malloc(first * sizeof *studArr);

另请注意, 不需要强制转换

如果要分配一个由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:

为了避免混淆基本问题(结构vs.数组vs指向struct的指针),我特意省略了“ typedef”内容。

您已经定义了一个指向struct的指针数组,而不是指向struct数组的指针。 该阵列的内存已作为全局阵列分配。

**studArr的类型为STUDENT,因此与赋值运算符右侧的表达式不兼容,该表达式**studArr(STUDENT**)

您可能的意思是:

STUDENT **studArr;

[...]

fscanf(fp, "%s", &first);
studArr = (STUDENT**) malloc(sizeof(STUDENT*)*first);

当您使用STUDENT * studArr [100]时; 则表示您已为STUDENT结构类型分配了100个指针的内存。

因此,您应该尝试分配内存。

studArr =malloc(sizeof(struct STUDENT)*first);

那么您可以将所有已分配的成员作为studArr[i] ....so on

您不清楚总体目标是什么。

首先,如果要读取整数,则要使用%d

int count;
if (fscanf(fp, "%d", &count) != 1) { // error... }

接下来,不要同时使用STUDENT作为结构名称和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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM