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 66 67 68 69 70 71 72 73 74 75 76 77 78 79
|
#include "functionVers2.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BLOCK 1
static char *slc_tab = NULL; // Tableau qui n'est plus de taille fixe comme dans la version 1
static int gCurrentPos = 0;
/*
Initialisation du tableau avec le nombre de bit voulu (BLOCK)
*/
void gmInit(int *pRC) {
if ((slc_tab = (char*) malloc(BLOCK * sizeof (char))) == NULL) {
*pRC = GM_ERROR;
puts("Init Error Malloc");
return;
}
gCurrentPos = 0;
*pRC = GM_OK;
}
/* Ajout d'un élément dans le tableau */
void gmAdd(char *pMsg, int *pRC) {
/*
Si le tableau est rempli ajout d'un nouveau bloc de n bit => réallocation
Si réallocation OK, on poursuis pour l'ajout de l'élément
*/
if (((gCurrentPos % BLOCK) == 0) && (gCurrentPos >= (BLOCK)))
{
// modulo entre la position courante et le nombre de block
if ((slc_tab = (char**) realloc(slc_tab, (gCurrentPos + BLOCK) * sizeof (char*))) == NULL)
{
*pRC = GM_ERROR;
puts("Realloc Failed");
return;
}
}
/*
Placement dans slc_tab[gCurrentPos] l'adresse réservé pour le char
Vérification si l'allocdation mémoire c'est bien passé => <> NULL
*/
if ((slc_tab[gCurrentPos] = (char*) malloc((strlen(pMsg) + 1) * sizeof (char))) == NULL) // +1 pour message avec le \0
// On Cast le malloc en disant que c'est de type char
{
puts("Alloc Char Failed");
*pRC = GM_ERROR;
return;
}
/*
Copie du message dans le tableau
Incrémentation de la position courante
*/
strcpy(slc_tab[gCurrentPos], pMsg);
gCurrentPos++;
*pRC = GM_OK;
}
/* Affichage des valeurs */
void gmDisplay(int *pRC) {
int dInd; // Index
*pRC = GM_OK;
for (dInd = 0; dInd < 5; dInd++) { // 5 n'est pas une bonne valeurs
printf("\n Message n° %d = %s", dInd + 1, slc_tab[dInd]);
}
} |