Problema aggiungi in testa lista

di il
1 risposte

Problema aggiungi in testa lista

Salve a tutti. Ho un problema con il mio programma. sto cercando di inserire dei token presi da un testo libero in testa alla lista ma mi da errore (error assignment to expression with array type) alla riga 64 (nuovonodo->par=T; nella funzione aggiungiInTesta) non ho capito il perchè. ringrazio in anticipo delle risposte.

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

/*------------------------------------------------NODO----------*/
typedef struct Snodo{
    char par[25];
    struct Snodo* next;
}Tnodo;

/*------------------------------------------------PUNTATORE AL NODO----------*/

typedef Tnodo* Pnodo;


/*------------------------------------------------LISTA----------*/

typedef struct Slista{
    Pnodo testa;
    int N;
}Tlista;

/*------------------------------------------------PROTOTIPI FUNZIONI----------*/
Tlista crealista();
Tlista aggiungiInTesta(Tlista l,char* T);
void stampalista(Tlista l);

/*------------------------------------------------MAIN----------*/

int main()
{
    Tlista l;
    char testo[2000];
    char* token;

    printf("inserire un testo libero massimo 2000 caratteri:\n");
    gets(testo);

    l=crealista();

    token=strtok(testo," ");
    while(token!=NULL){
        l=aggiungiInTesta(l,token);
        token=strtok(NULL," ");
    }
    /*stampa di prova*/
    stampalista(l);


    return 0;
}
/*------------------------------------------------IMPLEMENTO FUNZIONI----------*/
Tlista crealista(){
    Tlista ris;
    ris.testa=NULL;
    ris.N=0;
}
Tlista aggiungiInTesta(Tlista l,char* T){
    Pnodo nuovonodo;
    /*allocazione nuovo nodo*/
    nuovonodo=malloc(sizeof(Tnodo));
    /*inserimento valore nodo*/
    nuovonodo->par=T;
    /*aggiornamento puntatori*/
    nuovonodo->next=l.testa;
    l.testa=nuovonodo;
    l.N++;
    return l;
}
void stampalista(Tlista l){
    Pnodo p1;
    p1=l.testa;
    printf("\ngi elementi della lista sono: ");
    while(p1!=NULL){
        printf("%s ",p1->par);
        p1=p1->next;
    }
    return;
}

1 Risposte

  • Re: Problema aggiungi in testa lista

    Non puoi fare quell'assegnazione. Devi copiare byte-a-byte. Ad esempio con:
    strncpy(nuovonodo->par, T, 25);
    e comunque tenere sotto controllo i limiti dell'array di caratteri.
Devi accedere o registrarti per scrivere nel forum
1 risposte