[英]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.