|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Oct 2000
Città: Napoli
Messaggi: 976
|
[C] Gestire puntatore ad array di puntatori.
Ciao a tutti. Allora, chiedo scusa, ma sto impazzendo con i puntatori!
![]() Nel mio software sto gestendo una struttura di tipo puntatore ad array di puntatori a strutture che ho chiamato schede: Codice:
typedef struct _SCHEDA { int disp; /* marcatore */ char Nome[LSTRING]; /* nome del contatto */ char Cognome[LSTRING]; /* cognome del contatto */ char Email[LSTRING]; /* email del contatto */ } SCHEDA; Codice:
int main(int argc, char *argv[]) { SCHEDA **Rubrica = NULL; /* puntatore ad array di puntatori */ int Elem = 0; } /*endmain*/ int AllocaScheda ( SCHEDA ***Rubrica, /* puntantore al puntatore dell'array di puntatori */ int *elem /* numero di elementi presenti in rubrica */ ) { SCHEDA **Nuova; /* allocazione della memoria */ Nuova = ( SCHEDA ** )realloc( *Rubrica, ( *elem+1 ) * sizeof( SCHEDA* ) ); if( Nuova != NULL ) { Nuova[*elem] = ( SCHEDA * )malloc( sizeof( SCHEDA ) ); if( Nuova[*elem] != NULL ) { *Rubrica = Nuova; Nuova[*elem]->disp = 0; // marca la scheda come disponibile (*elem)++; /* nuovo elemento aggiunto */ return 1; /* allocazione avvenuta correttamente */ } } else { return 0; /* errore di allocazione */ } } Codice:
int CaricaFileCsv ( SCHEDA **Rubrica, int *elem ) { FILE *NuovoFile; /* file della rubrica */ char NomeFile[256]; /* contiene il nome del file */ int i; /* indice */ NuovoFile = fopen( "rubrica.csv", "r" ); /* apertura file predefinito */ if( NuovoFile == NULL ) /* il file non è stato aperto */ { printf(" Inserire il nome di un file da caricare\n\n > "); LeggiScelta( &NomeFile ); NuovoFile = fopen( NomeFile, "r" ); if( NuovoFile == NULL ) return 0; /* errore apertura */ } while( !feof( NuovoFile ) ) { Alloca(&Rubrica,elem); fscanf( NuovoFile, "%s", Rubrica[*elem]->Nome ); fscanf( NuovoFile, " %s", Rubrica[*elem]->Cognome ); fscanf( NuovoFile, " %s", Rubrica[*elem]->Email ); } fclose( NuovoFile ); /* chiusura del file */ return 1; } ![]() ![]() ![]()
__________________
Workstation: CPU AMD Ryzen 5600G @ 4400 MHz | RAM Corsair DDR4 32GB @ 3.2GHz | MoBo Gigabyte B550 AORUS Pro V2 | NVMe 1TB ~ WD Black SN850 | Storage 2x Caviar Green 10TB | PSU Fractal Ion+ 2 860W | GPU AMD Radeon RX 6800 XT Midnight Black | Mouse Logitech G Pro | Tastiera Logitech G915 TKL -- Audio/Video: AVR Denon X1300W 4K | Interfaccia audio Steinberg UR22 MKII | Casse 2x Klipsch RP-160M | Cuffie Sennheiser HD 650 | Mic Oktava MK 012 Black | Display LG OLED 48C1 @ 2160p 120Hz VRR FreeSync Ultima modifica di Starise : 21-11-2008 alle 10:57. |
![]() |
![]() |
![]() |
#2 |
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Ciao,
il file com'è strutturato? I campi come sono separati? (punto e virgola? Tab?). Io leggerei prima il numero di record presenti nel file e, quindi, allocherei con malloc anziché con realloc. Puoi linkare un file di esempio? |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 21:30.