chaîne de caractères et allocation basique de mémoire dans un tableau
Bonjour
J'essaye d'appliquer une méthode basique d'allocation de mémoire pour des caractères (dans un tableau de char).
Code:
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
|
#include <stdio.h>
#define TAILLETOTALE 10
static char espace[TAILLETOTALE];
static char *add = espace; /*initialisation du pointeur au début de mon espace*/
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;
espace[0]='\0';
printf("%s\n",espace);
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);
}
else{
libere(1);
printf("%s\n",espace);
}
}
}
char *alloue(char c){ /*renvoie 0 s'il n'y a pas suffisament de place*/
if (add + 1 - espace < TAILLETOTALE) {
*add=c;
add = add + 1;
*add='\0';
return add;
}
else
return 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){
add = add - n;
*add = '\0';
}
} |
Je ne comprend pas pourquoi le résultat donne des retours à la ligne entre chaque lettre et la chaîne se répète 2 fois. Comme je limite à 10 caractères je ne peux donc en enregistrer que 5.
Si quelqu'un pouvais me donner des indications ou des idées ce serait sympa :-)
Merci