Je cherche l'erreur

ScorpionTiti Messages postés 11 Date d'inscription mercredi 26 mai 2004 Statut Membre Dernière intervention 2 juin 2004 - 27 mai 2004 à 21:24
shirah3i Messages postés 24 Date d'inscription mercredi 31 mars 2004 Statut Membre Dernière intervention 10 juin 2004 - 28 mai 2004 à 09:48
J'ai effectué un programme qui me permette d'écrire dans un fichier et je l'ai compilé. En le lançant, il m'envoie un message d'erreur mais je ne sais pas d'où vient mon erreur.

Voici le programme :

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>

int main(int argc, char *argv[])
{
FILE * MonFichier;
FILE * fichbis;
char* MaChaine;
char nom_fichier[45], lettre_erronee, lettre_changee;
int i;

printf ("Veuillez donner le nom du fichier a ouvrir : ");
scanf ("%s", nom_fichier);
MonFichier = fopen(nom_fichier, "r+");

printf ("\nLe texte contenu dans le fichier est:\n%s\n", MaChaine);
MaChaine = (char*)malloc(45*sizeof(char));
strcpy(MaChaine,"Il a enleve son poing... rien n'a ete gache !\n");

MonFichier = fopen("LeFichier.txt","w");
//pour afficher à l'écran:
printf("%s",MaChaine);
//pour mettre la chaine dans le fichier texte:
fprintf(MonFichier, MaChaine);

printf ("Quelle lettre voulez-vous changer ?\n");
scanf ("%c", lettre_erronee);

printf ("Tapez la nouvelle lettre : ");
scanf ("%c", lettre_changee);

for(i=0;i<strlen(MaChaine);i++)
{
if(MaChaine[i]==lettre_erronee)

MaChaine[i]=lettre_changee;
}

printf ("\nLe texte modifie est donc le suivant :\n%s\n", MaChaine);

if (fclose(MonFichier)==EOF)
{
printf("\nProblème de fermeture du fichier!\n");
}

fichbis= fopen("nouveau.txt","r+");

fputs(MaChaine, fichbis);

fclose (fichbis);

system("PAUSE");
return 0;
}

7 réponses

cs_alain34270 Messages postés 85 Date d'inscription mardi 11 février 2003 Statut Membre Dernière intervention 18 septembre 2005
27 mai 2004 à 21:34
salut,

à première vue, tu ouvres deux fois un fichier ayant comme identifiant MonFichier.

a+
alain
0
cs_alain34270 Messages postés 85 Date d'inscription mardi 11 février 2003 Statut Membre Dernière intervention 18 septembre 2005
27 mai 2004 à 21:37
ou, plus exactement, quand tu exécutes :

MonFichier = fopen("LeFichier.txt","w");

il y a déjà eu, 4 instructions plus haut :

MonFichier = fopen(nom_fichier, "r+");

et il n'a pas été refermé entre temps.

je pense que ça peut peut-être venir de là, mais il faudrait avoir le message d'erreur.

alain
0
cs_alain34270 Messages postés 85 Date d'inscription mardi 11 février 2003 Statut Membre Dernière intervention 18 septembre 2005
27 mai 2004 à 21:44
de plus, la chaine :

"Il a enleve son poing... rien n'a ete gache !\n"

fait 46 caractères + le zéro final = 47 caractères, et tu n'alloues que 45 caractères.

alain
0
cs_alain34270 Messages postés 85 Date d'inscription mardi 11 février 2003 Statut Membre Dernière intervention 18 septembre 2005
27 mai 2004 à 21:46
fprintf sans chaine de formatage :

fprintf(MonFichier, MaChaine);

il faut
fprintf(MonFichier, "%s", MaChaine);

a+
alain
0

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

Posez votre question
cs_alain34270 Messages postés 85 Date d'inscription mardi 11 février 2003 Statut Membre Dernière intervention 18 septembre 2005
27 mai 2004 à 21:46
fprintf sans chaine de formatage :

fprintf(MonFichier, MaChaine);

il faut
fprintf(MonFichier, "%s", MaChaine);

a+
alain
0
ScorpionTiti Messages postés 11 Date d'inscription mercredi 26 mai 2004 Statut Membre Dernière intervention 2 juin 2004
27 mai 2004 à 22:56
OK!
Bien reçu.

Je modifierai tout ceci.

Merci

@ +
0
shirah3i Messages postés 24 Date d'inscription mercredi 31 mars 2004 Statut Membre Dernière intervention 10 juin 2004
28 mai 2004 à 09:48
Fais attention aussi à l'affichage que tu fais au tout début:
printf ("\nLe texte contenu dans le fichier est:\n%s\n", MaChaine);
A ce moment là, MaChaine n'est pas initialisée. Tu vas avoir un affichage mais pas un texte lisible!
Si tu veux afficher le contenu de ton fichier en passant par MaChaine, utilise fgets par exemple!
fegts(MaChaine,X,MonFichier)

@+
SHIRAH
0
Rejoignez-nous