Bonjour à tous,
Je suis en train d'écrire une fonction de chiffrement en césar, et j'ai un problème ... La fonction marche sans problème, mais quand je fais appelle à la dite fonction, dans le main, et que je veux afficher le résultat avec un printf, celui-ci ne fonctionne pas. Après plusieurs tests, j'ai vu que ça fonctionnait à chaque fois sauf quandje voulais afficher la chaine de caractère qui venait de la fonction cesar ... Pour récupérer le texte au clavier, j'utilise une fonction de mon cru qui renvoie un tableau qui a exactement la taille voulue ! Je met le fichier source en PJ si vous voulez.. Voici donc le CS de la fonction de saisie :
Celui de la fonction qui convertit les valeurs en nombres ASCII :
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
49
50
51 char *saisie(void) { char *tab = NULL; tab = malloc(1000 * sizeof(char)); if(tab) { fgets(tab, 999, stdin); /* Pour pourvoir placer le '\0' */ if((strchr(tab, '\n')) == NULL) /* Si le texte est trop grand pour le tableau */ { tab = utilBuffer(tab); if(tab == NULL) return NULL; } else if (strlen(tab) != 999) /* Si le tableau est trop grand pour le texte */ { tab = realloc(tab, strlen(tab) * sizeof(char)); } return tab; } else return NULL; } char *utilBuffer(char *tab) { char *temp = malloc(500 * sizeof(char)); if(temp == NULL) return NULL; size_t size; fgets(temp, 499, stdin); if((strchr(temp, '\n')) == NULL) { temp = utilBuffer(temp); } size = (strlen(tab) + strlen(temp)) * sizeof(char); tab = realloc(tab, size); /* On réajuste le tableau */ strcat(tab, temp); /* On rajoute */ return tab; }
La fonction de cryptage :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 int conversionAscii(char lettre) { int nombre = -1; /* Contiendra la valeur ASCII */ nombre = (int) lettre; /* On cast lettre pour qu'il nous donne la valeur ASCII de sa lettre*/ /* On vérifie si 'nombre' est bien un code de la table ASCII*/ if(!isascii(nombre)) return -1; else return nombre; }
et voila la fonction principale :
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 char* cesar(void) { int i = 0; char *texte = malloc(100); /* Texte à crypter ou décrypter */ char *result = NULL; /* Texte crypter ou décrypter */ int *valeurAscii = NULL; /* Tableau contenant les valeurs Ascii des lettres de 'texte' */ long decalage = 3; /* Décalage à opérer */ texte = saisie(); result = malloc(sizeof(*texte)); valeurAscii = malloc(strlen(texte) * sizeof (int)); for(i = 0; texte[i]; i++) { valeurAscii[i] = conversionAscii(texte[i]); if(valeurAscii[i] + decalage > 255) /* Si jamais la valeur ASCII est trop grande */ valeurAscii[i] = (valeurAscii[i] + decalage) - 255; else valeurAscii[i] = valeurAscii[i] + decalage; result[i] = toascii(valeurAscii[i]); } return result; }
Je suis sur que la fonction marche car j'ai fait un fprintf dans un fichier texte, et ça ma donné le bon crypt. Si vous voulez plus de précisions je suis à votre service !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 int main() { printf("%s", cesar()); return 0; }
Merci,
Partager