Bonjour

J'essaye d'appliquer une méthode basique d'allocation de mémoire pour des caractères (dans un tableau de char).

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';
    }
}
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