Я читаю данные из файла и мне нужен динамический c массив структур, основанный на том, сколько строк читается из файла.
Файл, который я читаю, может иметь до 5000 строк, теоретически я мог бы просто создать массив размером 5000, но я вижу, что неэффективно, поскольку некоторые файлы могут иметь только 10 строк
Указатели довольно новы для меня, но я не отступаю от них, Я также никогда не использовал Mallo c или бесплатно. Вот что я придумал, хотя 9/10 раз я получаю ошибку отладочного утверждения.
моя структура, которая содержит все необходимые элементы данных
struct RiderInfo
{
char name[41];
int age;
char raceLength[2];
double startTime;
double mountainTime;
double finishTime;
int withdrawn;
};
//Allocate space for next element
void allocateParticipant(struct RiderInfo participantList[])
{
participantList = realloc(participantList, sizeof(struct RiderInfo));
}
//read file
int readData(struct RiderInfo participantList[], const char filepath[])
{
//Declare Variables
int ammount = 0, rValue = 0;
//Declare filepointer
FILE* fp = fopen(filepath, "r");
//Continue to loop while return of readfile is correct
while (rValue == 0)
{
allocateParticipant(participantList);
//Read one line file, rValue is the return (if return of 1 eof reached)
rValue = readFileRecord(fp, &participantList[ammount]);
ammount++;
}
return ammount;
}
//free memory
void freeMemory(struct RiderInfo participantList[])
{
free(participantList);
}
int main(void)
{
//Declare struct array to hold each participants values
struct RiderInfo participant[] = { 0 };
//Declare filename for data
const char datafile[] = "data.txt";
//Read data from file and save return in size
int size = readData(&participant, datafile);
//Output Data
for (i = 0; i < size; i++)
{
printParticipant(&participant[i], 0);
}
//Free all used memory before exit
freeMemory(&participant);
//Exit
return 0;