Bonjour,

J'ai un problème sur un de mes programmes, j'ai besoin de votre aide je ne trouve pas la solution.
Je vous explique le principe j'ai deux chaines sous cette forme :
toto, tata, titi, jean-jacque,
foot, basket, hand,

L'ajout de ces chaines se réalise à l'aide de reallocs().
J'ai fais une fonction qui compare ces deux chaines -> int compare_chaine(char * premiere, char * seconde);
Ma fonction compte le nombre d'éléments dans chaque chaînes, si premiere < seconde la fonction renvoie 1 cela veut dire que le nombres d'éléments est inférieur dans ma chaine premiere. Sinon ma fonction renvoie 0.

Ce bout de code fonctionne mais le problème est qu'à la suite de l’exécution de compare_chaine, cela modifie completement ma chaine de départ (premiere) et j'ai besoin de cette chaine dans mon programme principal pour réaliser d'autres traitement dessus.

Illustration de mon problème :
Nom : Resultat_Execution.png
Affichages : 93
Taille : 38,1 Ko


Voici mon Code :
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
/* Déclaration du prototypes des fonctions : */
char * ajout_chaine(char *attribut);
int compare_chaine(char * premiere, char * seconde);
 
int main(void)
{
	char *premiere = NULL; 
	char *seconde = NULL;
	premiere = ajout_chaine("");//Ajout du premier champs vide nécessaire pour pouvoir imbriquer les autres chaines et éviter le warning
	seconde = ajout_chaine("");
 
	char toto[5] = "toto";
	toto[5] = '\0';
	premiere = ajout_chaine(strcat(premiere,toto));
	char basket[7] = "basket";
	basket[7] = '\0';
	premiere = ajout_chaine(strcat(premiere,basket));
	char tshirt[7] = "tshirt";
	tshirt[7] = '\0';
	premiere = ajout_chaine(strcat(premiere,tshirt));
 
	printf("Premiere -> %s\n", premiere);
 
	char titi[5] = "";
	titi[5] = '\0';
	seconde = ajout_chaine(strcat(seconde,titi));
	char football[9] = "";
	football[9] = '\0';
	seconde = ajout_chaine(strcat(seconde,football));
	char lalal[7] = "";
	lalal[7] = '\0';
	seconde = ajout_chaine(strcat(seconde,lalal));
	char llololo[7] = "";
	llololo[7] = '\0';
	seconde = ajout_chaine(strcat(seconde,llololo));
 
	printf("seconde -> %s\n", seconde);
 
	printf("premiere AVANT -> [ %s ]\n", premiere);
 
	printf(" \nResultat -> %d \n", compare_chaine(premiere, seconde)); 
 
	printf("premiere APRES -> [ %s ]\n Modification de ma chaine Problème ...\n", premiere);
	return 0;
} /* Fin main() */
 
char * ajout_chaine(char *attribut)
{
	char *maChaine = NULL;
 
	maChaine = realloc(maChaine, 100);
	strcpy(maChaine,attribut);
	//printf("maChaine -> [  %s  ]\n\nattribut -> [  %s  ]\n\n",maChaine, attribut);
	strcat(maChaine,",");
 
	return maChaine;
} /*Fin Ajout_chaine */
 
int compare_chaine(char * premiere, char * seconde) // Si c'est la premiere et premiere = seconde on retourne 1 sinon on retourne 0
{
	int i = 0, n = 0;
	char caractereSpecial[1] = ",";
	char *recup;
 
	recup = strtok(premiere, caractereSpecial);
	while( recup != NULL)
	{
		//printf("premiere -> [ %s ]\n", recup);
		recup = strtok(NULL, caractereSpecial);
		i++;
	}
 
	recup = strtok(seconde, caractereSpecial);
	while( recup != NULL)
	{
		//printf("seconde -> [ %s ]\n", recup);
		recup = strtok(NULL, caractereSpecial);
		n++;
	}
 
 
	printf(" premiere -> [ %d ]\nseconde -> [ %d ]\n", i, n);
 
 
	if(i<n)
	{
		return 1;
	}
 
	else
	{
		return 0;
	}
 
 
} /* Fin compare_chaine */
Merci pour votre aide en espérant avoir été assez rigoureux dans mon explication. Je ne comprends pas pourquoi cela modifie ma chaine c'est sans doute à cause de la fonction strtok().