Mi serve aiuto per un errore di buffer overflow

di il
4 risposte

Mi serve aiuto per un errore di buffer overflow

Buongiorno a tutti sono un ragazzo che ha praticamente iniziato a programmare in c/c++ qualche settimana fa. Sto creando un programma che deve fare questo: permettere l'inserimento in una lista di libri che hanno un titolo,autore,editore ed anno di pubblicazione, visualizzare tutti i libri nella lista, permettere la ricerca del libro più vecchio ed infine permettere all'utente di inserire il nome di un determinato autore e stampare tutti i dati dei libri dell'autore cercato. Non ho avuto problemi con tutti i punti tranne che per quello della ricerca dell'autore perchè ogni volta che inserisco il nome per cercare le opere di un determinato autore mi da return value 3221225477 che da quello che so è buffer overflow.

Ecco il codice così che possiate vederlo:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>

#define MAX 20

struct Libro{

char autore[20];
char titolo[20];
char editore[20];
int anno;
};

typedef struct Libro Libraccio;

int menu();
Libraccio inserimento();
void stampaLibro(Libraccio Libro[], int dim);
void librovecchio(Libraccio lista[], int dim);
void cercaautore(Libraccio lista[],int dim);

int main(){

Libraccio ListaLibri[MAX];
int scelta, i=0;
char nome[20];

while(scelta=menu()){ //permette di ristampare al termine dell'operazione il menu

switch(scelta){

case 1:
ListaLibri=inserimento();
i++;
break;

case 2:
librovecchio(ListaLibri, i);
break;

case 3:
cercaautore(ListaLibri,i);
break;

case 4:
stampaLibro(ListaLibri, i);
break;

case 0:
break;

}

}

return 0;

}

int menu(){

int scelta;

printf("********GESTIONE LIBRI********\n");
printf("1: Inserisci Libro\n");
printf("2: Cerca Libro\n");
printf("3: Cerca Autore\n");
printf("4: Stampa Libri\n");
printf("0: Esci\n");
scanf("%d", &scelta);

while(scelta<0||scelta>4){
printf("Scelta non valida!\n");
printf("Scelta: ");
scanf("%d", &scelta);
return scelta;
}
return scelta;
system("PAUSE");
}

Libraccio inserimento(){
Libraccio Libro;
fflush(stdin);
printf("Inserire il titolo del libro: ");
fgets(Libro.titolo,20,stdin);
printf("\n");
printf("Inserire l'autore del libro: ");
fgets(Libro.autore,20,stdin);
printf("\n");
printf("Inserire l'editore del libro: ");
fgets(Libro.editore,20,stdin);
printf("\n");
printf("Inserire l'anno di pubblicazione: ");
scanf("%d", &Libro.anno);

return Libro;
}

void stampaLibro(Libraccio Libro[], int dim){
int i;
for(i=0;i<dim;i++){
printf("Ecco i dati del libro %d: \n\n\n", i);
printf("Titolo: %s\n", Libro.titolo);
printf("Autore: %s\n", Libro.autore);
printf("Editore: %s\n", Libro.editore);
printf("Anno: %d\n", Libro.anno);
}

}

void librovecchio(Libraccio lista[], int dim){

int j;
Libraccio vecchio;
vecchio.anno=lista[0].anno;


for(j=0;j<dim;j++){
if(vecchio.anno>lista[j].anno){
vecchio=lista[j];
}
else{
vecchio.anno=vecchio.anno;
}
}

printf("Il libro piu' vecchio e'\n", vecchio.anno);
printf("Titolo: %s\n", vecchio.titolo);
printf("Autore: %s\n", vecchio.autore);
printf("Editore: %s\n", vecchio.editore);
printf("Anno: %d\n", vecchio.anno);

}

void cercaautore(Libraccio lista[],int dim){
char nome[20];
fflush(stdin);
printf("Inserisci il nome dell'autore: ");
fgets(nome,20,stdin);
Libraccio LibriAutore[dim];
int i, j;
for(i=0;i<dim;i++){
if(strcmp (lista.autore, nome)==0){
LibriAutore[j]=lista;
j++;
}
else{
printf("Errore");
}
}

for(j=0;j<dim;j++){
printf("Libro numero %d\n", j);
printf("Titolo: %s\n", LibriAutore[j].titolo);
printf("Autore: %s\n", LibriAutore[j].autore);
printf("Editore: %s\n", LibriAutore[j].editore);
printf("Anno: %d\n", LibriAutore[j].anno);
}
}

4 Risposte

Devi accedere o registrarti per scrivere nel forum
4 risposte