У меня есть файл с 10 строками, и в каждой строке есть, разделенные пробелами, имя, идентификатор и возраст. Проблема в том, что при чтении этого файла с помощью fgets и sscanf он возвращает мне ошибку сегмента при попытке прочитать более двух строк.
typedef struct Person
{
char name[1024];
long id;
float age;
} Person;
int main(int argc, char *argv[])
{
FILE *inputPeople = fopen(argv[1], "r");
Person *arrPersons = NULL;
if (assignInputPeople(&arrPersons, inputPeople]) == EXIT_FAILURE)
{
return EXIT_FAILURE;
}
*arrPersons = (Person*)malloc(10 * sizeof(Person));
int assignInputPeople(Person **arrPersons, FILE *inputPeople)
{
int counter = 0;
char fileLine[MAX_LENGTH_LINE];
long ID;
float ageF;
while (fgets(fileLine, MAX_LENGTH_LINE, inputPeople) != NULL)
{
sscanf(fileLine, "%s %s %s", arrPersons[counter]->name,&ID,
&ageF);
counter++;
printf("%s\n",fileLine);
(*arrPersons)[counter].age = ageF;
(*arrPersons)[counter].id = ID;
if (counter == capacity)
{
capacity += CAPACITY;
*arrPersons = (Person*)realloc(*arrPersons, capacity*sizeof(Person));
if (*arrPersons == NULL)
{
return EXIT_FAILURE;
}
}
}
Я создал указатель на указатель для своего массива, чтобы я мог изменить это в других функциях, подобных этой выше. Вот пример типичного файла