Comment utiliser la fonction malloc pour créer une table de structures

Comment utiliser la fonction malloc pour créer une table de structures

La structure est un type de données similaire au tableau utilisé dans la programmation C, mais la seule différence est qu'un tableau contient les valeurs du même type de données tandis que la structure contient les valeurs sur la base de types de données définis par l'utilisateur. Les tableaux occupaient certains espaces sur la mémoire du système qui peuvent être dynamiques ou statiques. La fonction malloc () est utilisée pour la déclaration de la mémoire dynamique.

Un tableau d'une structure peut être déclaré soit en utilisant la mémoire statique ou la mémoire dynamique, dans cet article, nous discuterons du tableau de structures à l'aide de la fonction malloc ().

Comment créer un tableau de structures avec une fonction malloc en c

Les structures en programmation C sont utilisées de manière similaire aux classes. Le temps d'exécution des structures est relativement plus rapide que les classes. Pour comprendre la structure, considérez l'exemple:

1
2
3
4
5
6
7
employés de structure
int emp_id;
char emp_name;
;

Nous avons une structure de «employés«Qui compte deux autres membres; EMP_INT et EMP_CHAR. Nous pouvons former un tableau en utilisant les employés de structure comme:

1
Struct Employés EmployésData [4];

Nous avons déclaré un tableau «EmployésData"Utilisation de la structure"employés»Et il a 4 emplacements pour stocker les valeurs. Si nous voulons accéder aux seconds éléments du tableau de structure que nous utiliserons, EmployingData [1], et de même si nous voulons accéder aux membres des éléments que nous utiliserons, EmployésData [1].emp_id.

Mais ici, nous pouvons également utiliser la fonction malloc () pour utiliser l'allocation de mémoire dynamique. L'avantage de la mémoire dynamique est qu'il utilise l'espace pendant l'exécution du programme en fonction de l'exigence. Pour cela, nous utilisons la fonction malloc (), qui envoie la demande pour attribuer un bloc de mémoire au segment du tas de la mémoire qui stocke les données au hasard. Si la mémoire du tas ne peut pas divertir la demande de malloc () en raison d'un espace insuffisant, il renvoie le null sinon il attribue le bloc demandé à la fonction malloc () pour l'exécution du programme.

Maintenant, si nous voulons utiliser la fonction malloc () pour la déclaration du tableau de structure, le programme sera:

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

typedef struct

char * emp_name;
int emp_id;
Employés;
int num = 2, i;
Employés * employésData = malloc (num * sizeof * EmployésData);
pour (i = 0; i < num; i++)

EmployésData [i].emp_name = (char *) malloc (sizeof (char *));
printf ("Entrez le nom de l'employé:");
scanf ("% s", employésdata [i].EMP_NAME);
printf ("Entrez l'ID de l'employé:");
scanf ("% d" et employésData [i].emp_id);

printf («Veuillez saisir tous les noms de 8 caractères maximum \ n»);
pour (i = 0; i < num; i++)
printf ("Nom des employés:% S, Employés ID:% D \ n", employésdata [i].EMP_NAME, EmployésData [i].emp_id);
gratuit (employésData);
retour (0);

Nous ouvrirons un fichier texte, MyFile1, avec l'aide de Nano Editor et collerons le script ci-dessus:

1
$ nano myfile1.c

Utilisez le compilateur GCC pour compiler le fichier ci-dessus:

1
$ gcc myfile1.c -o myfile1

Une fois le fichier compilé avec succès, exécutez le programme à l'aide de la commande:

1
$ ./ myfile1

L'explication du code ci-dessus est:

  • Tout d'abord, nous avons ajouté les bibliothèques de STDLIB.H (utilisé pour les fonctions d'allocation de mémoire dynamique) et STdio.H (utilisé par les autres fonctions de base de la programmation C)
  • Ensuite, dans la fonction principale, nous avons passé l'ARGC (Nombre d'argument) et Argv (vecteur d'argument) utilisé pour les nombres qui sont entrés par les utilisateurs et pointent respectivement les pointeurs de caractère
  • Après cela, nous avons déclaré la structure de «Employés"Ayant deux valeurs emp_id et emp_name
  • Initialisé les deux variables num et i; NUM a attribué la valeur de 2 afin qu'il puisse prendre deux intrants pour les «employés» de structure »
  • Ensuite, j'ai utilisé la fonction malloc pour attribuer la mémoire en fonction de la valeur de NUM à la matrice de pointeur (employés)
  • J'ai pris l'entrée de l'utilisateur et afficher les valeurs à l'aide de la boucle pour

Note: Nous devons utiliser le «typedef struct"En déclarant la structure, en utilisant cela, nous n'avons pas à utiliser le mot-clé"structure" à plusieurs reprises.

Une autre chose à noter est que cela peut faire déborder le tampon parce que nous avons utilisé le «char *”À l'intérieur de l'argument malloc pour déclarer la taille du EMP_NAME variable. Cela fait que le nom EMP_. Ce débordement de tampon ne se produit pas tout le temps (la plupart du temps, il est automatiquement géré par le compilateur au moment de l'exécution). Nous avons donc incité l'utilisateur à entrer 8 caractères maximum pour le nom de l'employé juste pour être du côté sûr.

Si vous ne souhaitez pas mettre une limite sur le nombre de caractères pour le nom de l'employé, vous pouvez simplement prendre l'entrée d'abord pour le nom de l'employé à l'intérieur de la boucle pour une nouvelle variable, puis passer cette taille de variable dans la fonction malloc.

Conclusion

Le type de données struct en programmation C offre de meilleures performances lorsque nous devons faire face aux petits groupes des mêmes valeurs. Dans cet article, nous avons discuté de la création de structures avec des tableaux en utilisant la fonction de mémoire dynamique qui est la fonction malloc (). La fonction malloc () utilise seulement autant de blocs de mémoire qui est requis.