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

Résolu/Fermé
balou311 Messages postés 765 Date d'inscription mardi 1 février 2005 Statut Membre Dernière intervention 21 septembre 2006 - 13 juil. 2005 à 19:31
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 15 juil. 2005 à 11:15
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 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
13 juil. 2005 à 20:10
Un message d'erreur quelque part ou ça plante vraiment complètement?
0
balou311 Messages postés 765 Date d'inscription mardi 1 février 2005 Statut Membre Dernière intervention 21 septembre 2006 87
13 juil. 2005 à 20:24
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 jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
13 juil. 2005 à 20:44
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 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
13 juil. 2005 à 21:02
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 mardi 1 février 2005 Statut Membre Dernière intervention 21 septembre 2006 87 > kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016
15 juil. 2005 à 09:58
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 jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567 > balou311 Messages postés 765 Date d'inscription mardi 1 février 2005 Statut Membre Dernière intervention 21 septembre 2006
15 juil. 2005 à 11:15
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