[C] ca me dépasse pb avec fopen()

Résolu
balou311 Messages postés 765 Date d'inscription   Statut Membre Dernière intervention   -  
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   -
Salut à tous
alors la je comprend vraiment pas le problème
merci de me dire pourquoi ça fonctionne pas!

int fichier_mfgpro(struct w_zone * p_w_zone, char * p_a_ecrire)
{
FILE *l_fic_mfg;
struct w_zone * l_w_zone;

char * l_chiffre = "0123456789";
char * l_nom_fichier;
char * l_num_id;
char l_2lettre_site[3];
char l_num_op[3];
int l_ret;


l_w_zone = p_w_zone;
l_w_zone->p_op = (p_w_zone->p_op + (p_w_zone->p_service.etape_courante - 1));

strncpy(l_num_id,(l_w_zone->p_of.num_of + 16),(strlen(l_w_zone->p_of.num_of + 16)));

strncpy((l_2lettre_site + 0),(l_w_zone->p_of.nom_of + 10),sizeof(char));
strncpy((l_2lettre_site + 1),(l_w_zone->p_of.nom_of + 11),sizeof(char));
l_2lettre_site[2] = 0X00;

printf(l_w_zone->p_op->nom);

strncpy((l_num_op + 0),strpbrk(l_w_zone->p_op->nom,l_chiffre),2*sizeof(char));
l_num_op[2] = 0X00;

sprintf(l_nom_fichier,"%s.%s.%s.xml%c",l_2lettre_site,l_num_id,l_num_op,0X00);
printf("l_nom_fichier:%s\n",l_nom_fichier);

Jusque la tout fonctionne bien donc mon l_nom_fichier est OK
Après ca plante total


if ((l_fic_mfg = fopen(l_nom_fichier,"w+")) == NULL)
{
printf("Erreur lors de la création du fichier");
return 0;
}

l_ret = fprintf(l_fic_mfg,"<?xml version=\"1.0\" ?>\n%s\n</nom_op>\n",p_a_ecrire);

if (l_ret < 0)
{
printf("Erreur lors de l'enregistrement des info dans le fichier");
return 0;
}
else
printf("fichier généré!");

fclose(l_fic_mfg);

return 1;
}

merci de m'aider j'en ai marre

2 réponses

kilian Messages postés 8732 Date d'inscription   Statut Modérateur Dernière intervention   1 526
 
Un message d'erreur quelque part ou ça plante vraiment complètement?
0
balou311 Messages postés 765 Date d'inscription   Statut Membre Dernière intervention   87
 
segmentation(fault)
donc à mon avis il veut lire ou ecrire quelque part en mémoire mais il peut pas!
merci de ton aide
0
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Salut,

Kilian je vois qu'on revient à malloc() et l'opérateur ->.

balou311
Avec tes pointeurs il vaut mieux alloué un peut de mémoire.

struct w_zone * l_w_zone;

l_w_zone = malloc(sizeof(struct w_zone))

mais il faut voir dans ton code (tu as écrit une partie).
0
kilian Messages postés 8732 Date d'inscription   Statut Modérateur Dernière intervention   1 526
 
Kilian je vois qu'on revient à malloc() et l'opérateur ->.

Il ne m'ont plus quittés depuis ce jour ^^

Pour le pointeur ya pas besoin, c'est un pointeur vers une structure passée en argument.

Regarde peut être vers la ligne là:
 l_ret = fprintf(l_fic_mfg,"<?xml version=\"1.0\" ?>\n%s\n</nom_op>\n",p_a_ecrire); 

Commente là pour voir si c'est ça qui pose problème. Ya peut être un soucis avec p_a_ecrire.
0
balou311 Messages postés 765 Date d'inscription   Statut Membre Dernière intervention   87 > kilian Messages postés 8732 Date d'inscription   Statut Modérateur Dernière intervention  
 
Merci à tous les deux pour votre aide

maintenant ça fonctionne sans vraiment que je comprenne pourquoi mais bon.

pour le malloc c'est pas utile c'est un des pointeurs (je les utilise justement pour pas me faire chier avec les malloc(......) et les free(.....) lol )

quant à p_a_ecrire ça m'étonnerai fortement bref.
merci quand même tcho
0
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570 > balou311 Messages postés 765 Date d'inscription   Statut Membre Dernière intervention  
 
Salut,

Merci à tous les deux pour votre aide
De rien, mais je vois qu'on n'a pas trop t'aider.
maintenant ça fonctionne sans vraiment que je comprenne pourquoi mais bon.
Il doit fonctionner puisque tu as du faire des modifications, et si tu ne comprends pas pourquoi il fonctionne, apart le résultat tu n'as pas gagner grand chose, mais c'est à toi de voir.

pour le malloc c'est pas utile c'est un des pointeurs (je les utilise justement pour pas me faire chier avec les malloc(......) et les free(.....) lol )

Ben, justement, le principal inérêt d'un pointeur est la gestion de l'allocation dynamique de la mémoire, et pour ça tu as malloc(), free(),calloc(),realloc().
Dans le cas des pointeurs la mémoire n'est plus allouée de manière statique lors de la declarations des variables, mais dynamiquement au mesure des besoins.
Si tu ne veux pas alloué dynamiquement de la mémoire je ne vois pas l'intêret de declarer autant des pointeurs.

Le message d'erreur :
"segmentation fault" ( Erreur de segmentation)
il veut bien dire que le programme essaie d'accéder à une zone mémoire inaccessible ou non autorisée.


A+

lami20j
0