Bonjour
J'essaye d'appliquer une méthode basique d'allocation de mémoire pour des caractères (dans un tableau de char).
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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'; } }
Si quelqu'un pouvais me donner des indications ou des idées ce serait sympa :-)
Merci
Partager