Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 30/11/2014, à 01:34

totoirl

[RESOLU ^^]fonction écrivant dans un fichier sans écraser le contenu

Bonjour, je suit actuellement le tuto de M. Nebra sur la programmation en C.

J'en suis arrivé au chapitre sur la lecture et l'écriture dans des fichiers. Comme petit exercice de fin de cour, j'ai entrepris de créer ma propre fonction pour écrire n'importe où dans un fichier sans en écraser le contenu.
Ma méthode n'est probablement pas la plus simple mais je penses qu'elle fonctionne.

Je rencontre toutefois un problème lors du test de ma fonction...

Voici le fichier entier :

#ifndef DEF_wfile
#define DEF_wfile

/*	__________________________________________*/
/*							*/
/*	wfile		 				*/
/*	HEADER					*/
/*							*/
/*	Fonction permettant d'écrire dans un		*/
/*	fichier sans en écraser le contenu.			*/
/*							*/
/*	Créé le 29/11/2014				*/
/*	__________________________________________*/


int wfile(long emplacementOuEcrire, char *s_CHAINE_A_AJOUTER, FILE *pointeur_fichier);

int wfile(long emplacementOuEcrire, char *s_CHAINE_A_AJOUTER, FILE *pointeur_fichier)
{
	fseek(pointeur_fichier, emplacementOuEcrire, SEEK_SET);					//Place le curseur où l'on veut écrire

	#define d_TAILLE_CHAINES 1000000

	char s_SAUVEGARDE_FIN_FICHIER[d_TAILLE_CHAINES] ={0};				//Sauvegarde tout le contenu du fichier après le curseur
	int caractereLu = 0;
	int i;

		for(i = 0 ; i > d_TAILLE_CHAINES ; i++);
	{
		caractereLu = fgetc(pointeur_fichier);
		s_SAUVEGARDE_FIN_FICHIER[i] = caractereLu;
	}

	char s_CHAINE_CONCATENEE[d_TAILLE_CHAINES] = {0};					//Concatène la chaine de sauvegarde après la chaine à ajouter
	strcpy(s_CHAINE_CONCATENEE, s_CHAINE_A_AJOUTER);

	strcat(s_CHAINE_CONCATENEE, s_SAUVEGARDE_FIN_FICHIER);

	fseek(pointeur_fichier, emplacementOuEcrire, SEEK_SET);					//Ecrit la chaine concaténée à l'emplacement du curseur
	fputs(s_CHAINE_CONCATENEE, pointeur_fichier);
	

	return 0;
}

/*	__________________________________________*/
#endif

Voici maintenant le fichier main.c du programme de test :

#ifndef DEF_main
#define DEF_main

/*	__________________________________________*/
/*							*/
/*	test wfile						*/
/*	1						*/
/*							*/
/*	main		 				*/
/*	SOURCE					*/
/*							*/
/*							*/
/*	Créé le 29/11/2014				*/
/*	__________________________________________*/


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

#include "wfile.h"


int main()
{
	char s_CHAINE_A_AJOUTER = "test";

	FILE *pointeur_fichiertest = NULL;

	pointeur_fichiertest = fopen("fichiertest", "r+");

		if(pointeur_fichiertest != NULL)
	{
		printf("Ouverture réussie");		
		wfile(13, s_CHAINE_A_AJOUTER, pointeur_fichiertest); 
		fclose(pointeur_fichiertest);
	}
		else
	{
		printf("Erreur lors de l'ouverture du fichier");
	}

	return 0;
}

/*	__________________________________________*/
#endif

Le fichier "fichiertest" contient le texte suivant :

Ceci est un de la fonction wfile !!!

Le programme de test est donc censé transformer ce texte en :

Ceci est un test de la fonction wfile !!!

Oui mais voila, lorsque je lance le programme, jai uniquement droit au message "Segmentation fault"

Je m'arrache les cheveux depuis 2h pour trouver mon (ou mes ^^) erreurs, sans résultats...
Quelqu'un aurait-il une solution ???

D'avance merci !!
Nico

Dernière modification par totoirl (Le 30/11/2014, à 02:03)

Hors ligne

#2 Le 30/11/2014, à 01:57

totoirl

Re : [RESOLU ^^]fonction écrivant dans un fichier sans écraser le contenu

Message du Build Log (Code::Block) :


-------------- Build: Debug in Test wfile (compiler: GNU GCC Compiler)---------------

gcc -Wall -g  -c "/home/nicolas/Bureau/Tuto programmation/Programmes/Test wfile/main.c" -o obj/Debug/main.o
/home/nicolas/Bureau/Tuto programmation/Programmes/Test wfile/main.c: In function ‘main’:
/home/nicolas/Bureau/Tuto programmation/Programmes/Test wfile/main.c:26:28: warning: initialization makes integer from pointer without a cast [enabled by default]
  char s_CHAINE_A_AJOUTER = "test ";
                            ^
/home/nicolas/Bureau/Tuto programmation/Programmes/Test wfile/main.c:35:3: warning: passing argument 2 of ‘wfile’ makes pointer from integer without a cast [enabled by default]
   wfile(13, s_CHAINE_A_AJOUTER, pointeur_fichiertest);
   ^
In file included from /home/nicolas/Bureau/Tuto programmation/Programmes/Test wfile/main.c:21:0:
/home/nicolas/Bureau/Tuto programmation/Programmes/Test wfile/wfile.h:21:5: note: expected ‘char *’ but argument is of type ‘char’
 int wfile(long emplacementOuEcrire, char *s_CHAINE_A_AJOUTER, FILE *pointeur_fichier)
     ^
g++  -o "bin/Debug/Test wfile" obj/Debug/main.o   
Output file is bin/Debug/Test wfile with size 11.55 KB
Process terminated with status 0 (0 minute(s), 0 second(s))
0 error(s), 2 warning(s) (0 minute(s), 0 second(s))
 

-------------- Run: Debug in Test wfile (compiler: GNU GCC Compiler)---------------

Checking for existence: /home/nicolas/Bureau/Tuto programmation/Programmes/Test wfile/bin/Debug/Test wfile
Executing: xterm -T Test\ wfile -e /usr/bin/cb_console_runner LD_LIBRARY_PATH=$LD_LIBRARY_PATH:. /home/nicolas/Bureau/Tuto\ programmation/Programmes/Test\ wfile/bin/Debug/Test\ wfile  (in /home/nicolas/Bureau/Tuto programmation/Programmes/Test wfile/.)
Process terminated with status 0 (2 minute(s), 28 second(s))

Hors ligne

#3 Le 30/11/2014, à 02:02

totoirl

Re : [RESOLU ^^]fonction écrivant dans un fichier sans écraser le contenu

oh mon dieu !!!!!

xcusez... je viens de trouver l'erreur ^^ et j'en suis pas fier !!!

j'ai simplement oublié les [ ] après char s_CHAINE_A_AJOUTER roll

La fonction fonctionne parfaitement !!

sujet clos ^^

Dernière modification par totoirl (Le 30/11/2014, à 02:02)

Hors ligne