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

[Résolu/Fermé]
Signaler
Messages postés
765
Date d'inscription
mardi 1 février 2005
Statut
Membre
Dernière intervention
21 septembre 2006
-
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
-
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

Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 521
Un message d'erreur quelque part ou ça plante vraiment complètement?
Messages postés
765
Date d'inscription
mardi 1 février 2005
Statut
Membre
Dernière intervention
21 septembre 2006
87
segmentation(fault)
donc à mon avis il veut lire ou ecrire quelque part en mémoire mais il peut pas!
merci de ton aide
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 561
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).
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 521
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.
Messages postés
765
Date d'inscription
mardi 1 février 2005
Statut
Membre
Dernière intervention
21 septembre 2006
87 >
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016

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
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 561 >
Messages postés
765
Date d'inscription
mardi 1 février 2005
Statut
Membre
Dernière intervention
21 septembre 2006

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