C Fichier text et pointeurs

doudinho06 Messages postés 32 Date d'inscription jeudi 16 juin 2011 Statut Membre Dernière intervention 19 mai 2014 - 27 août 2012 à 15:36
livevlad Messages postés 8 Date d'inscription vendredi 4 février 2011 Statut Membre Dernière intervention 25 septembre 2012 - 17 sept. 2012 à 08:25
Bonjour,
Je vous expose mon probleme que j'arrive pas à resoudre depuis 2 jours!!
J'ai crérer deux fonction Copie_fichier1(path1) et Copie_fichier1(path2)
qui creent une copie, traitent et renvoie le chemin ou le fichier est stocké cela me pose pas problème. Parcontre lorsque j'appel ces deux fonction pour comparer les deux copie dans une autre fonction comme illustrer ci-dessous:
FILE *f1 = NULL;
Copie_path1=Copie_fichier1(path1);
f1 = fopen (Copie_path1,"r");
return Copie_path1;
cela me renvoie bien le chemin en question. et aussi
FILE *f2 = NULL;
Copie_path2=Copie_fichier2(path2);
f2 = fopen (Copie_path2,"r");
return Copie_path2;
Cela aussi me renvoie bien le chemin de la copie dans probléme , Par contre si je procede comme suit:

FILE *f1 = NULL;
FILE *f2 = NULL;
Copie_path1=Copie_fichier1(path1);
Copie_path2=Copie_fichier2(path2);
f1 = fopen (Copie_path1,"r");
f2 = fopen (Copie_path2,"r");
return Copie_path1;
le chemin retourné par Copie_fichier1 et toujours celui de Copie_fichier2 !!!?

Quelqu'un peut m'aider!
Merci d'avance



char* _stdcall CompareLOG(char *path1,char *path2)
{
char* Copie_path1;
char* Copie_path2;
char* S;
char in_line1[MAXLINE];
char in_line2[MAXLINE];
int Suppression1;
int Suppression2;
int resultat=111;
int i=1;
int TailleFile1=0;
int TailleFile2=0;

FILE *f1 = NULL;
Copie_path1=Copie_fichier1(path1);
f1 = fopen (Copie_path1,"r");

FILE *f2 = NULL;
Copie_path2=Copie_fichier2(path2);
f2 = fopen (Copie_path2,"r");

return Copie_path1;

5 réponses

BunoCS Messages postés 15479 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 juin 2024 103
27 août 2012 à 17:18
Hello,
Merci d'utiliser les balises codes pour plus de lisibilité (3e icone en partant de la droite, juste au-dessus de la zone de texte).

Tu n'alloues pas tes variables Copie_path1 et Copie_path2?


@+
Buno, Admin CS
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
ed73 Messages postés 276 Date d'inscription lundi 8 septembre 2008 Statut Membre Dernière intervention 15 avril 2013 2
28 août 2012 à 09:13
Bonjour,

Copie_fichier1 et Copie_fichier2 renvoient certainement un char * et Copie_Path1 et Copie_Path2 pointent donc sur la valeur retournée.

A mon avis, l'adresse retournée est la même pour les 2 fonctions (variable globale, statique, etc...) et au final les 2 variables pointent au même endroit.

Je suppose que par ailleurs, tes 2 fichiers s'ouvrent correctement.
doudinho06 Messages postés 32 Date d'inscription jeudi 16 juin 2011 Statut Membre Dernière intervention 19 mai 2014 1
30 août 2012 à 13:55
Je suis bien daccord avec toi adel73 mais je vois pas de solution pour ce probléme car j'ai bien envie que Copie_Path1 et Copie_Path2 point chaqu'une vers leur propre chemin! pas vers le meme endroit!!
ed73 Messages postés 276 Date d'inscription lundi 8 septembre 2008 Statut Membre Dernière intervention 15 avril 2013 2
30 août 2012 à 14:28
Il faut recopier les valeurs renvoyées :

char Copie_path1[MAX_PATH];
char Copie_path2[MAX_PATH];

strcpy(Copie_path1,Copie_fichier1(path1));
strcpy(Copie_path2,Copie_fichier2(path2));

En règle générale, méfie-toi des fonctions qui retournent des pointeurs car ils peuvent soit pointer au même endroit, soit ne plus être valides après le retour de la fonction. Dans ces 2 cas, il faut recopier les données dès le retour de la fonction.

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
livevlad Messages postés 8 Date d'inscription vendredi 4 février 2011 Statut Membre Dernière intervention 25 septembre 2012
17 sept. 2012 à 08:25
Dans les fonctions copier_fichier1/2, comment sont définies les variables qui sont ensuite retournées.

Sont-elles des char* dont tu alloues la mémoire via un malloc (ou new en c++) ou alors est-ce une déclaration du type char chaine[150].

Dans le second cas si tu retourne "chaine", la mémoire n'est plus consacré à cette variable et une autre fonction peut réécrire dessus.
En revanche dans le premier cas la mémoire alloué le reste jusqu'à un free (ou delete en c++).

Donc en gros dans les fonctions qui retourne des char*, alloue la mémoire de la variable dynamiquement pour éviter de perdre la réservation de l'espace mémoire utilisé.

Voila en espérant que cela va t'aider
Rejoignez-nous