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
|
#include <stdio.h>
#define TAILLETOTALE 10
static char espace[TAILLETOTALE];
static char *add = espace; /*initialisation du pointeur*/
char *alloue(char c);
void libere(int n);
int main (){/*utilisation de ce systeme d'allocation : chaîne de caractères,tapés un par un, le s sert à effacer les caractères et le f à quitter la programme*/
int c=0,i;
for (i=0;i<TAILLETOTALE;i++)
espace[i]='\0';
printf("%s\n",espace);
printf("tout début : %d\n",add);
while ( (c=getchar()) != 102){ /*102 est la valeur de f sur mon sytème, 115 de s*/
if (c != 115){
alloue(c);
printf("%s\n",espace);
printf("ajout d'un caractère : %d\n",add);
}
else if (c == 115) {
libere(1);
printf("%s\n",espace);
printf("suppression d'un caractère : %d\n",add);
}
}
}
char *alloue(char c){ /*renvoie 0 s'il n'y a pas suffisament de place*/
if (add + 1 - espace < TAILLETOTALE) {
printf("alloue\n");
*add=c;
printf("pointeur+1\n");
add = add + 1;
*add='\0';
}
}
void libere(int n){/*libère n "cases" mémoires, dangereux car ne vérifie pas si les données restantes ne sont pas tronquées*/
if (add-n >= espace){
printf("nombre de cases à libérer : %d\n",n);
add = add - n;
*add = '\0';
printf("%d cases libérées\n",n);
}
} |
Partager