Моей целью было создать адресную книгу, содержащую 10 контактов с использованием структур C. Пользователь должен вставлять контакты один за другим, а моя программа должна печатать всю адресную книгу. Компиляция успешна, но когда я запускаю свою программу, она печатает только первый контакт, а затем я получаю ошибку сегментации. Это мой код:Создание адресной книги с использованием структур C
Файл Ex7.h:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define DIM 10
struct person {
char name[40];
char surname[40];
char date[11];
char number[11];
};
typedef struct person Person;
void dataEntry(Person *person);
void printPerson(Person person);
void printAddressBook(Person *addbook[10]);
файл Ex7.c:
#include "ex7.h"
void dataEntry(Person *person) {
printf("Insert name: ");
gets(person -> name);
printf("Insert surname: ");
gets(person -> surname);
printf("Insert date of birth [mm/dd/yyyy]: ");
gets(person -> date);
printf("Insert phone number: ");
gets(person -> number);
}
void printPerson(Person person) {
printf("Name: %s\n", person.name);
printf("Surname: %s\n", person.surname);
printf("Date of birth: %s\n", person.date);
printf("Number: %s\n\n", person.number);
}
void printAddressBook(Person *addbook[10]) {
for (int i = 0; i < DIM; i++) {
printPerson(*addbook[i]);
}
}
файл main.c:
#include "ex7.h"
int main(void) {
Person* addbook = (Person*) malloc(DIM*sizeof(Person));
printf("DATA ENTRY\n\n");
for (int i = 0; i < DIM; i++) {
printf("Person %d:\n", i);
dataEntry(&addbook[i]);
}
printf("\n\nPRINTING ADDRESS BOOK...\n\n");
printAddressBook(&addbook);
return 0;
}
Тогда я собрал все печатая : gcc -o main main.c ex7.c -std = c99
'лицо * addbook = (лицо *) таНос (DIM * SizeOf (человека));': 'addbook' является указателем на 10 человек. 'Person * addbook [10]': 'addbook' - массив из 10 указателей на Person. – BLUEPIXY