gpt4 book ai didi

c - 为指向结构体数组的指针分配内存

转载 作者:行者123 更新时间:2023-11-30 18:32:10 27 4
gpt4 key购买 nike

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "queue.h"
#include "stack.h"

#define RECORDS_SIZE 100
#define NAME_SIZE 20

typedef struct Student
{
char nameStudent[NAME_SIZE];
int TimeIn;
int TimeUpdate;
}STUDENT;

typedef struct TUTOR
{
char nameTutor[NAME_SIZE];
int TutorTIme;
STUDENT *ptr;
}TUTOR;


QUEUE *queue1;
STACK *stack1;

void getData(STUDENT *studentArr[RECORDS_SIZE]);

int main (void)
{

STUDENT *studentArr[RECORDS_SIZE];
FILE *fp = NULL;

getData(studentArr);

return 0;
}

void getData(STUDENT *studentArr[RECORDS_SIZE])
{
FILE *fp;
char fileName[NAME_SIZE];
char buffer[RECORDS_SIZE];
int count = 0;

printf("Enter file name: ");
gets(fileName);
fp = fopen(fileName, "r");
if (fp == NULL)
{
printf("Error! The file does not exist!\n");
}

fgets(buffer, RECORDS_SIZE, fp);
*studentArr = (STUDENT*) malloc(buffer[0]*sizeof(STUDENT));
while (fgets(buffer, RECORDS_SIZE, fp) != NULL)
{
printf("%s", buffer[count]);
*studentArr[count]->nameStudent = (char*) malloc(strlen(buffer)*sizeof(char));
studentArr[count]->TimeIn = (int) malloc(strlen(buffer)*sizeof(int));
sscanf(buffer,"%[,],%d", *studentArr[count]->nameStudent, &studentArr[count]->TimeIn);

printf("%s%d\n", studentArr[count]->nameStudent, &studentArr[count]->TimeIn);
count++;
}

return;
}

有一个警告,表示赋值从指针生成整数而不进行强制转换[默认启用]|在我为 *studentArr[count]->nameStudent 分配内存的行上,为什么会收到此警告?

这就是我的文件的样子

4
A,10
B,12
C,60
D,120
tutorY

我尝试读取第一行,然后使用第一行上的数字来分配指向结构数组的指针,然后继续读取,然后分配结构的其余成员

我认为我的 while 循环错了,可能我不应该调用 fgets 然后在 while 循环中重用它,因为那里似乎有错误。我该如何修复这个功能?

提前致谢

最佳答案

修改后的问题

nameStudent is an array of 20 character, I think this may cause an issue when allocating.

在这种情况下,您根本不需要动态分配 nameStudent 字段。当您创建学生结构时,姓名的所有空间都将作为学生结构的一部分进行分配。

<小时/>

早期观察

如果你真的有:

*studentArr[count]->nameStudent = (char*) malloc(strlen(buffer)*sizeof(char));

然后是 nameStudent 的合理类型

 struct Xxxx
{
...
char *nameStudent;
...
};

前面有一个 * 取消引用一个未定义的 char 指针。这就是您收到警告的原因:

 assignment makes integer from pointer without a cast [enabled by default]

采用固定大小学生姓名的结构可能会为您提供更好的服务:

 struct Xxxx
{
...
char nameStudent[32];
...
};
<小时/>

关于c - 为指向结构体数组的指针分配内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16156105/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com