Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2000
    Messaggi
    1,175

    [C] Impossibile accedere a elementi di una struct

    Allora ho una struttura che supponiamo si chiami STRUTT e la assegno così
    codice:
    int main()
    {
       STRUTT **miaVar = NULL;
       int N = 0;
    
       funzioneEsterna(&miaStrutt, &N);
       miaStrutt[0]->campo1 = "xyz";
       miaStrutt[0]->campo2 = "123";
    }
    
    int funzioneEsterna(STRUTT ***Elem, int *N)
    {
        allocaMemoria(Elem, N);
    }
    Così funziona tutto correttamente, quello che vorrei è che le due righe:
    codice:
    miaStrutt[0]->campo1 = "xyz";
    miaStrutt[0]->campo2 = "123";
    possano essere scritte tramite la funzione funzioneEsterna() e non nel main, come posso fare? Tutti i miei tentativi mi danno errore.

    Grazie è importante!

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Posta anche la struttura e la dichiarazione di miaStrutt
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2000
    Messaggi
    1,175
    codice:
    struct Contatto {
           char *Nome;
           char *Cognome;
           char *IndirizzoMail;
    };
    Questa è la struttura.

    miaStrutt è in realtà miaVar.
    Ho sagliato nell'editare per il forum

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Allora, prima di tutto, non puoi utilizzare i puntatori della struttura senza allocare lo spazio per le stringhe.

    In C, infatti, le stringhe non si assegnano con il simbolo = ma con la funzione strcpy.

    Dopo che ti sei chiarito questa parte, passiamo al resto (ai problemi della struttura e della funzione ...)
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    271
    a occhio mi sembra che abbiamo più o meno lo stesso problema.. stai facendo anche tu la rubrica?

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2000
    Messaggi
    1,175
    Originariamente inviato da dogo21sob
    a occhio mi sembra che abbiamo più o meno lo stesso problema.. stai facendo anche tu la rubrica?
    Sì, ti avevo riconosciuto subito nell'altro post .

    Quindi se dichiaro la struttura, definendo il numero di char: esempio char Nome[64] dopo assegno con strcpy dovrei risolvere giusto?

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da Metallica
    Quindi se dichiaro la struttura, definendo il numero di char: esempio char Nome[64] dopo assegno con strcpy dovrei risolvere giusto?
    Diciamo che saresti sulla buona strada ... ma poi bisogna vedere il resto del codice ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2000
    Messaggi
    1,175
    Beh, così non mi da problemi in compilazione però crasha.

    Nel senso:
    Lasciando il main così
    codice:
    typedef struct Contatto {
           char a[64];
           char b[64];
           char c[64];
    } STRUTT;
    
    
    int main()
    {
      // ...
      STRUTT **miaVar = NULL;
      int N = 0;
    
      funzioneEsterna(&miaVar, &N);
    
    }
    funzione esterna così:
    codice:
    int funzioneEsterna(STRUTT ***Prova, int *N)
    {
      if (Rialloca(Prova, N)==0)
      {
         strcpy((*Prova[0])->a, "aaa");
         strcpy((*Prova[0])->b, "bbb");
         strcpy((*Prova[0])->c, "ccc");
      }
    }
    con Rialloca che ha un prototipo come:
    codice:
    int Rialloca(STRUTT ***struttura, int *N);
    Ora il prolema è:
    La funzione rialloca compie il suo lavoro, il problema è la strcpy in funzioneEsterna, infatti con un solo valore funziona, con 2 va in crash. Come devo fare per assegnare correttamente i valori alla struttura?

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Mostrare la funzione

    Rialloca

    mi sembra necessario ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    Utente di HTML.it
    Registrato dal
    Sep 2000
    Messaggi
    1,175
    codice:
    int Rialloca
    ( STRUTT ***PpTesta, // puntatore al puntatore all'array dei puntatori 
      int      *Pn       // puntatore al numero di elementi allocati  
    )
    { STRUTT **Temp;
      int    Errore = -1;
       
      Temp = (STRUTT **)realloc(*PpTesta, (*Pn+1)*sizeof(STRUTT*));
      if (Temp != NULL) 
      { 
        Temp[*Pn] = (STRUTT *)malloc(sizeof(STRUTT));
        if (Temp[*Pn] != NULL) 
        { 
          *PpTesta = Temp;
          (*Pn)++;        // senza le parentesi verrebbe incrementato Pn
          Errore = 0;     // allocazione avvenuta con successo
        } 
      }
      return Errore;
    }

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 © 2025 vBulletin Solutions, Inc. All rights reserved.