Programma smette di funzionare

di il
6 risposte

Programma smette di funzionare

Ciao a tutti, mi stavo esercitando un po' su struct e puntatori vari, quando ad un certo punto, nel fare un esercizio, mi sono accorto di una grossa lacuna..Come faccio, avendo una struct con all'interno un puntatore a qualcos'altro, a "modificare" proprio quella cosa "puntata" fuori dalla struct (scusate il gioco di parole,si capisce meglio sotto)??? Lasciando stare le richieste precise, l'esercizio forniva questi queste strutture:

typedef char * nome;
typedef nome* elencocandidati;
typedef nome candidati[N];

typedef struct lis{
int partito;
elencocandidati elenconomi;
} listacandidati;


Ora , se volessi scrivere il nome ed il partito di un certo candidato a caso, come dovrei fare?
Perchè ho provato con :

int main(){
listacandidati l;
l.partito = 1;
l.elenconomi[0]= "ESEMPIOmarco"; // questo è il passaggio che mi crea problemi, come dovrei scriverlo correttamente?
printf("%d",l.partito);
printf("%s",*l.elenconomi[0]);
return 0;
}

Ma il programma smette di funzionare proprio alla riga l.elenconomi.....

Grazie a chiunque mi risponda ! )

6 Risposte

  • Re: Programma smette di funzionare

    Mi sembra che manchi l'allocazione per lo spazio del nome ...
  • Re: Programma smette di funzionare

    Dove? Dentro la struct?
  • Re: Programma smette di funzionare

    Per ogni candidato.
  • Re: Programma smette di funzionare

    Quindi come andrebbe scritta?
  • Re: Programma smette di funzionare

    
    #define MAX_NOM     10
    #define MAX_LENNOM  25
    
    typedef char * nome;
    typedef nome candidati[MAX_NOM];
    
    typedef struct lis{
    	int partito;
    	candidati elenconomi;
    } listacandidati;
    
    int main(){
    	listacandidati l;
    	l.partito = 1;
    
    	l.elenconomi[0] = (nome)malloc(MAX_LENNOM * sizeof(char));
    	strcpy(l.elenconomi[0], "Bianchi Giuseppe");
    
    	l.elenconomi[1] = (nome)malloc(MAX_LENNOM * sizeof(char));
    	strcpy(l.elenconomi[1], "Rossi Mario");
    
    	printf("%d\n", l.partito);
    	printf("%s\n", l.elenconomi[0]);
    	printf("%s\n", l.elenconomi[1]);
    
    	return 0;
    }
    
  • Re: Programma smette di funzionare

    Intanto grazie per la risposta, un ulteriore problema era però proprio il collegamento tra elencocandidati e candidati[N] , probabilmente ho fatto casino io nel modificare il testo dell'esercizio per mettere in evidenza il mio problema.. ma inizialmente la struct era così:

    #define N 5 // La circoscrizione Monza e Brianza assegna 5 seggi
    typedef char* nome; //una stringa!
    typedef nome * elencocandidati; //il tipo di un vettore di puntatori a carattere
    typedef nome candidati[N]; //un vettore di N puntatori a carattere

    typedef struct lis { int partito;
    elencocandidati elenconomi; //”punta a” un vettore di tipo candidati
    struct lis * next; } listacandidati;

    typedef listacandidati * lista; //una lista di listacandidati (una per partito)
Devi accedere o registrarti per scrivere nel forum
6 risposte