Questa è la funzione completa.
struct libri
{
int code;
char title[MAX_TITLE_LEN];
char des[MAX_DES_LEN];
struct libri *next;
};
struct libri *start = 0;
struct libri ***search(const char title[])
{
struct libri **books = (struct libri**) malloc(sizeof(struct libri*));
if(!books)
{
puts("Ricerca interrotta");
}
books[0] = start;
struct libri ***point;
struct libri *a = (struct libri*)malloc(sizeof(struct libri));
if(!a)
{
puts("Ricerca interrotta");
}
int s = 1;
for(a = start; a; a = a->next)
{
if(strstr(a->title, title))
{
books = (struct libri **) realloc(books, sizeof(struct comp*) * (s + 1));
if(!books)
{
puts("Ricerca non completata");
goto ret;
}
point = &books;
(*point)[s] = a;
s++;
}
}
(*point)[0]->code = s - 1;
ret:
return point;
}
Ho risolto i problemi precedenti, ma ne restano due:
- L'elemento 0 del vettore books è uguale all'elemento 1(notato durante l'esecuzione del programma)
- Se avvio la ricerca in un database vuoto l'istruzione "(*point)[0]->code = s - 1;", restituisce errore.