Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [C]solito problema con i puntatori

    ciao a tutti ho un problema che non riesco a risolvere da ore e ore
    e più ci provo più la stanchezza mi impedisce di capire..
    Ho queste 2 struct
    codice:
     
    struct mail {
    	char mittente[LENGTH];
    	int size;
    	void *buf;
    };
    
    struct utente {
    	char username[LENGTH];
    	mail *lista_mail;
    };
    e un array di utente
    codice:
     
    struct utente * lita_utenti;
    definite globalmente.

    nel main, "compongo una mail" facendo:
    codice:
     
    struct mail nuova;
    char messaggio[100] = {"prova messaggio"};
    nuova.size = 100;
    strcpy(nuova.mittente, "sono il mittente");
    nuova.buf = (void *)messaggio;
    se faccio
    codice:
     
    printf("%s", (char *)nuova.buf);
    il messaggio si visualizza bene.

    Poi alloco spazio necessario per aggiungere un utente alla "lista_utenti".
    Aggiungo quindi un nuovo utente a questa lista.
    Poi alloco spazio necessario per aggiungere una mail alla "lista_mail" dell'utente.
    Aggiungo quindi la nuova mail, tramite:
    codice:
     
    lista_utente[0].lista_mail[0] = nuova;
    di nuovo, facendo
    codice:
     
    printf("%s", (char *)lista_utente[0].lista_mail[0].buf);
    il messaggio si visualizza bene.

    fin qui tutto ok, poi però, se chiamo una funzione da me definita all'interno dello stesso sorgente:

    print_mail();

    che è in questo modo:
    codice:
    int print_mail () {
    	printf("mittente: %s\n", lista_utenti[0].lista_mail[0].mittente);
    	printf("mittente: %s\n", (char *) lista_utenti[0].lista_mail[0].buf);
    	return 0;
    }
    il mittente si visualizza bene, mentre il "corpo" della mail ha caratteri sballati tipo ?? e dimensione errata.
    non riesco a capire proprio dove sbaglio.

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,472
    Ci mostri tutto il codice intero in modo da poterlo copiare-incollare ed esaminare senza dover fare un collage?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    non è nient'altro che questo ma disseminato di commenti e bozze dei pezzi che dovrò implementare, che comunque non vanno a toccare le variabili in discussione

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,472
    Se ti ho chiesto di postare il codice completo di main ci sarà un motivo ... puoi farlo in modo che ti possa rispondere o no?

    Ad esempio, dove hai inserito il codice per l'allocazione di

    lista_utente

    ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Non mi è chiaro dove scrivi queste porzioni di codice che hai postato, faresti meglio a postare il codice intero perchè ad esempio qua:

    codice:
    struct mail nuova;
    char messaggio[100] = {"prova messaggio"};
    nuova.size = 100;
    strcpy(nuova.mittente, "sono il mittente");
    nuova.buf = (void *)messaggio;
    La cosa dipende molto da che ci fai con l' array messaggio, perchè tu fai puntare nuova.buf alla stringa,ma se la stringa viene sovrascritta nuova.buf non punta più alla stessa stringa.In memoria punta alla stessa area di memoria, ma se in quella memoria ci sono scritti caratteri differenti vengono letti caratteri differenti.

  6. #6
    si si certo, lo faccio senz'altro
    devo solo pulirlo visto che sono centinaia e centinaia di righe di commenti di spezzoni da aggiungere

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.