Mam kod:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define DL_IMIENIA 15
#define DL_NAZWISKA 30
#define DL_TYTULU 30
#define MAX_AUTOROW 5
#define MAX_KSIAZKI 5
struct autor {
char imie[DL_IMIENIA];
char nazwisko[DL_NAZWISKA];
int rokurodzenia;
};
struct ksiazka {
char tytul[DL_TYTULU];
int rok;
float cena;
struct autor *autorzy[MAX_AUTOROW];
};
int ileksiazek(struct ksiazka **ksiazki);
void dodawanie(struct ksiazka **ksiazki,int ile);
main () {
int wybor,ile; // Zmienna wyboru opcji z menu oraz ilosc ksiazek w bazie
struct ksiazka *ksiazki[MAX_KSIAZKI]={0,};
// Nieskonczona petla, program dziala, dopoki nie zostanie wybrana opcja wyjscia z menu
for (;;) {
// Ile ksiazek jest juz w bazie
ile=ileksiazek(&ksiazki);
// Menu wyboru opcji
printf("Obecnie w bazie znajduje sie %d ksiazek\n\n Menu wyboru zadan:\n1. Dodaj ksiazke do bazy\n9. Wyjdz z programu\n\nTwoj wybor to:\n",ile);
wybor=getch();
system("cls"); // Czyszczenie ekranu dla zachowania estetycznosci
switch(wybor) {
case '1':
dodawanie(&ksiazki,ile);
break;
case '2':
//edytowanie();
break;
case '3':
//pokaz();
break;
case '4':
//usun();
break;
case '5':
//szukaj();
break;
case '6':
//zapisz();
break;
case '7':
//wczytaj();
break;
case '8':
//opis();
break;
case '9':
exit(0);
break;
default:
printf("Niepoprawny wybor\n\n"); // Co ma robic program jesli wybierzemy opcje ktora nie istnieje
break;
} // Koniec funkcji switch
} // Koniec petli for
} // koniec main
// Deklaracje funkcji
int ileksiazek (struct ksiazka **ksiazki) {
int i=0,licznik=0;
while(i<MAX_KSIAZKI) {
if(*ksiazki != 0) licznik++;
//printf("%d\n",*ksiazki);
i++;
ksiazki++;
}
return licznik;
}
void dodawanie(struct ksiazka **ksiazki,int ile) {
ksiazki+=ile;
//printf("%d",*ksiazki);
*ksiazki=malloc(sizeof(struct ksiazka));
struct autor *autor;
autor=malloc(sizeof(struct autor));
autor=(*ksiazki)->autorzy;
printf("Podaj tytul ksiazki numer %d:\n", ile+1); //Przypisywanie tytulu
while(strlen(gets((*ksiazki)->tytul))>DL_TYTULU) printf("Za dlugi\n");
printf("Podaj imie autora ksiazki \"%s\":\n",(*ksiazki)->tytul); //Przypisywanie autora
while(strlen(gets((*ksiazki)->autorzy[0]->imie))>DL_IMIENIA) printf("Za dlugie:\n",); // TU COS JEST ZLE
printf("Podaj nazwisko autora ksiazki \"%s\":\n",(*ksiazki)->tytul); //Przypisywanie autora
while(strlen(gets((*ksiazki)->autorzy[0]->nazwisko))>DL_IMIENIA) printf("Za dlugie:\n"); // TU COS JEST ZLE
printf("Podaj rok urodzenia autora: %s %s:\n",(*ksiazki)->autorzy[0]->imie,(*ksiazki)->autorzy[0]->nazwisko);
scanf("%d%*c",&(*ksiazki)->autorzy[0]->rokurodzenia);
printf("\n\n%d\n\n",(*ksiazki)->autorzy[0]->rokurodzenia);
}
W tych linijkach gdzie napisalem ze tam jest zle, gdy uruchamiam przez Debuggera bo wywala blad:
"W twoim programie zgłoszono naruszenie praw dostępu(błąd segmentacji)"
Wiecie moze co tam jest nie tak?