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 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
|
void AjoutMessage(struct etGMessage *pGMessage)
{
/************************************************************************************************/
/* sMessage : variable dans laquelle on stockera le message du programme utilisateur. */
/* dLongueurMessage : variable qui permettra de stocker la longueur de la chaine de caractères. */
/* **pPointeurTableau : double pointeur pointant vers l'entièreté du tableau de pointeurs. */
/************************************************************************************************/
char sMessage[100];
int dLongueurMessage;
char **pPointeurTableau = pGMessage->tMessages;
/*******************************************************************************************/
/* D'abord, on regarde s'il reste de la place dans le gestionnaire de messages. */
/* Si le gestionnaire est plein, il faut agrandir la zone mémoire du tableau de pointeurs. */
/*******************************************************************************************/
if (pGMessage->dNextFreeCell == pGMessage->dTableSize)
{
/******************************************************************************************************************/
/* On incrémente la variable contenant la taille du tableau de pointeurs. */
/* On réalloue au double pointeur pointant vers le tableau de pointeurs de la mémoire : */
/* on multiplie par la nouvelle taille du tableau de pointeurs le nombre de bytes que prend un pointeur sur char. */
/******************************************************************************************************************/
pGMessage->dTableSize++;
pPointeurTableau = (char**)realloc(pPointeurTableau, pGMessage->dTableSize * sizeof(char*));
}
/************************************************/
/* On réceptionne ensuite le message à stocker. */
/************************************************/
printf("Message a ajouter au gestionnaire :\n");
gets_s(sMessage);
/*********************************************************/
/* On calcule la longueur de cette chaine de caractères. */
/*********************************************************/
dLongueurMessage = strlen(sMessage);
/***************************************************************************************************************/
/* On alloue de manière dynamique de la mémoire (taille = longueur de la chaine de caractères + 1 pour le \0.) */
/* On spécifie avant la fonction malloc que c'est un pointeur char*. */
/* Le sizeof(char) est omis car il est égal à 1. */
/***************************************************************************************************************/
pGMessage->tMessages[pGMessage->dNextFreeCell] = (char*)malloc(dLongueurMessage + 1);
/**********************************************************************************/
/* On copie notre chaine de caractères dans cet espace mémoire nouvellement créé. */
/**********************************************************************************/
strcpy(pGMessage->tMessages[pGMessage->dNextFreeCell], sMessage);
/*************************************************************************************/
/* On incrément l'index pointant vers le prochain emplacement libre du gestionnaire. */
/*************************************************************************************/
pGMessage->dNextFreeCell++;
} |
Partager