Come utilizzare la funzione Malloc per creare una matrice di strutture

Come utilizzare la funzione Malloc per creare una matrice di strutture

La struttura è un tipo di dati simile all'array utilizzato nella programmazione C, ma l'unica differenza è che un array contiene i valori dello stesso tipo di dati mentre la struttura contiene i valori sulla base dei tipi di dati definiti dall'utente. Gli array occupavano alcuni spazi sulla memoria del sistema che possono essere dinamici o statici. La funzione Malloc () viene utilizzata per la dichiarazione della memoria dinamica.

Un array di una struttura può essere dichiarato utilizzando la memoria statica o la memoria dinamica, in questo articolo, discuteremo dell'array di strutture usando la funzione Malloc ().

Come creare una matrice di strutture con funzione malloc in c

Le strutture nella programmazione C sono utilizzate in modo simile alle classi. Il tempo di esecuzione delle strutture è relativamente più veloce delle classi. Per capire la struttura, considera l'esempio:

1
2
3
4
5
6
7
Struttura dipendenti
int emp_id;
char emp_name;
;

Abbiamo una struttura di “dipendenti"Che ha altri due membri; EMP_INT ed EMP_CHAR. Possiamo formare un array usando i dipendenti struct come:

1
Struct Employees EmployeesData [4];

Abbiamo dichiarato un array "Employersdata"Usando la struttura"dipendenti"E ha 4 posizioni per archiviare i valori. Se vogliamo accedere ai secondi elementi dell'array struct che useremo, EmployersData [1], e allo stesso modo se vogliamo accedere ai membri degli elementi che useremo, EmployersData [1].emp_id.

Ma qui possiamo anche usare la funzione Malloc () per utilizzare l'allocazione di memoria dinamica. Il vantaggio della memoria dinamica è che utilizza lo spazio durante l'esecuzione del programma in base al requisito. Per questo, utilizziamo la funzione Malloc (), che invia la richiesta per assegnare un blocco di memoria al segmento HEAP della memoria che memorizza i dati in modo casuale. Se la memoria heap non può intrattenere la richiesta di malloc () a causa di spazio insufficiente, restituisce il altro altro, assegna il blocco richiesto alla funzione Malloc () per l'esecuzione del programma.

Ora, se vogliamo utilizzare la funzione Malloc () per la dichiarazione dell'array di struttura, il programma sarà:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#includere
#includere
int main (int argc, char ** argv)

typedef struct

char* emp_name;
int emp_id;
Dipendenti;
int num = 2, i;
Dipendenti * dipendentiData = malloc (num * sizeof * dipendentidata);
per (i = 0; i < num; i++)

EmployeeSdata [i].emp_name = (char*) malloc (sizeof (char*));
printf ("Immettere il nome del dipendente:");
scanf ("%s", EmployersData [i].emp_name);
printf ("Immettere ID dipendente:");
scanf ("%d" e dipendentidata [i].emp_id);

printf ("Inserisci tutti i nomi di massimo 8 caratteri \ n");
per (i = 0; i < num; i++)
printf ("Nome dipendente: %s, ID dipendenti: %d \ n", dipendenti [i].emp_name, EmployersData [i].emp_id);
gratuito (EmployersData);
return (0);

Apriremo un file di testo, MyFile1, con l'aiuto di Nano Editor e incollare lo script sopra:

1
$ nano myfile1.C

Utilizzare il compilatore GCC per compilare il file sopra:

1
$ gcc myfile1.c -o myfile1

Una volta compilato correttamente il file, eseguire il programma usando il comando:

1
$ ./myfile1

La spiegazione del codice sopra è:

  • Innanzitutto, abbiamo aggiunto le biblioteche di stdlib.H (utilizzato per le funzioni dinamiche di allocazione della memoria) e STDIO.H (utilizzato dalle altre funzioni di base della programmazione C)
  • Quindi nella funzione principale, abbiamo superato l'argc (conteggio degli argomenti) e l'argv (vettore di argomento) utilizzati per i numeri che sono inseriti dagli utenti e indicano rispettivamente i puntatori del personaggio
  • Dopo questo, abbiamo dichiarato la struttura di "Dipendenti"Avere due valori EMP_ID ed EMP_NAME
  • Inizializzato le due variabili num e i; NUM ha assegnato il valore di 2 in modo che possano richiedere due input per la struttura "dipendenti"
  • Quindi ha utilizzato la funzione Malloc per assegnare la memoria in base al valore di NUM all'array di puntatore (dipendenti)
  • Ha preso l'input dall'utente e visualizza i valori utilizzando il loop

Nota: Dobbiamo usare il “typedef struct"Nel dichiarare la struttura, usando questo non dobbiamo usare la parola chiave"strumento"Ripetutamente.

Un'altra cosa da notare è che può far traboccare il buffer perché abbiamo usato il "CHAR *"All'interno dell'argomento di Malloc per dichiarare le dimensioni del emp_name variabile. Questo fa sì che il nome EMP_ sia limitato a 8 byte per l'architettura a 64 bit e 4-byte per architetture a 32 bit. Questo overflow del buffer non si verifica sempre (il più delle volte viene gestito automaticamente dal compilatore in fase di esecuzione) Pertanto abbiamo spinto l'utente a inserire 8 caratteri massimi per il nome del dipendente solo per essere al sicuro.

Se non si desidera mettere un limite al numero di caratteri per il nome del dipendente, puoi semplicemente prendere prima l'input per il nome del dipendente all'interno del loop in una nuova variabile e quindi passare quella dimensione della variabile nella funzione Malloc.

Conclusione

Il tipo di dati struct nella programmazione C offre prestazioni migliori quando dobbiamo gestire piccoli gruppi degli stessi valori. In questo articolo, abbiamo discusso della creazione di strutture con array usando la funzione di memoria dinamica che è Malloc (). La funzione Malloc () utilizza solo un blocco di memoria richiesto.