Tom's Guide > Forum > Programmation > Problème écriture dans un fichier en language C

Problème écriture dans un fichier en language C

Forum Programmation : Problème écriture dans un fichier en language C

TomsGuide.com : 800 000 inscrits répondent à toutes vos questions high-tech et informatique. Pour obtenir de l'aide, inscrivez-vous gratuitement !
Mot :    Pseudo :           
 

Bonjours à tous,

 
Code :
  1. void  SaisirClient(int i)
  2. {
  3.   char Identifiant[9];
  4.  
  5.   FILE *fichier;
  6.  
  7.   if ((fichier = fopen("annuaire.txt", "r" )) == NULL)
  8.   {
  9.       printf ("\n Impossible d'ouvrir le fichier annuaire.txt \n" );
  10.       exit(1);
  11.   }
  12.   system("CLS" );
  13.   printf (" Saisie du %d ieme Client: \n", i + 1 );
  14.   printf ("\n Entrez l'identifiant: " );
  15.   scanf ("%s", &ListeClient[i].Identifiant);
  16.   while(fscanf(fichier,"\n%[^*]*", &Identifiant)!=EOF) // tant que la fin du fichier n'est pas atteint
  17.   {
  18.       if(strcmp(Identifiant, ListeClient[0].Identifiant)==0)
  19.       {
  20.         printf ("\n Erreur: l'Identifiant existe deja. Recommencez: " );
  21.         scanf ("%s", &ListeClient[i].Identifiant);
  22.       }
  23.   } // fin du while
  24.   fclose(fichier);
  25. }
 
Code :
  1. void Enregistrement(int NbreClients)
  2. {
  3.   char str[8];
  4.   char chainefic[1000];
  5.   int index;
  6.   int k;
  7.   int lg,i;
  8.   char newline[2]= "\n";
  9.  
  10.   FILE *files;
  11.  
  12.   if ((files = fopen("annuaire.txt", "a" )) == NULL)
  13.   {
  14.       printf ("\n Impossible d'ouvrir le fichier annuaire.txt \n" );
  15.       exit(1);
  16.   }
  17.   for(i=0; i < NbreClients; i++)
  18.   {
  19.       //instruction longue donc je vous la met pas
  20.   }
  21.   fclose(files);
  22. }
 

dans le main(), sa ce présente comme ça:

Code :
  1. for (i = 0; i < NbreClients; i++)
  2. {
  3.     SaisirClient(i);
  4. }
  5.          
  6. Enregistrement(NbreClients);
 


Donc voila mon problème que je rencontre avec ces deux fonction, je saisie des information que je veux ensuite enregistrer dans le fichier annuaire.txt, seulement sa ne fonctionne que si il n'y a rien dans le fichier, si j'ai déjà saisie des info avant, windows me met un message d'erreur du genre:
"Annuaire.exe a rencontré un problème et doit fermer. Nous vous prions de nous excuser pour le désagrément encouru."

 

Je pense que le problème vient de fait que j'utilise deux fois d'affillé FILE* fichier, fichier = fopen(....). Mais je n'arrive pas a comprendre pourquoi.
Qu'es ce que vous en pensez?

 

Merci d'avance pour vos réponse

 


Message édité par seb326 le 11-04-2008 à 18:43:15
Liens sponsorisés
Inscrivez-vous ou connectez-vous pour masquer ceci.

C'est ton programme qui crash.
Le FILE * ne pose pas de problème, d'autant que tu fermes bien le fichier.

 

Ton problème vient d'ailleurs. Lorsque tu enregistres en fin de fichier, as-tu déjà chargé des données ?

 

Sinon, passe en debug pour savoir où ça plante exactement.
Probablement un pointeur qui, quelque part, n'est pas NULL, ce qui donne un pointeur invalide sur la mémoire hors de ton processus.


Message édité par CRicky le 11-04-2008 à 20:36:05
------------------------------ 6800A007B81300CD10B00131C989CF26880541
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky

Merci d'avoir répondu aussi rapidement, je vais voir dans ce sens.

Répondre à seb326

A oui j'ai oublié de précisais que lorsque je retire le FILE *fichier et le fichier = fopen(...) enfin tous ce qui permet de lire le fichier dans la fonction saisie et bien sa fonctionne très bien, c'est pour sa que je pensais que ça venais de la.

Répondre à seb326

Non, c'est lorsque tu lis le fichier, tu ne remplis pas correctement tous les champs.
Est-ce que tous chaines sont correctement taillées (que ce soit statiquement ou dynamiquement), en prenant bien en compte le '\0' terminal de toute chaine de caractères. Si tu as des liens (comme pour les listes chainées), pour touts les liens non utilisés, force-les bien à 0.
Lorsque tu prends le contenu d'un pointeur, vérifie bien que tu fais un test de pointeur non nul.

------------------------------ 6800A007B81300CD10B00131C989CF26880541
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky

Désolé mais je n'ai pas tout compris. Oui toute mes chaine de caractère sont bien taillé j'ai fait attention mais qu'es ce que tu entend par statiquement et dynamiquement? Et finissent bien par \0.

Répondre à seb326

En débugant, j'ai trouvé le problème mais je sais pas comment le résoudre!
le problème vient de la:

1. for (i = 0; i < NbreClients; i++)
2. {
3. SaisirClient(i);
4. }
5.
6. Enregistrement(NbreClients);

Par exemple, je rentre comme valeur 1 pour NbreClient (le code pour cette saisie n'est pas affiché), donc il fait la boucle for une fois puis passe a la fonction Enregistrement mais le problème c'est que lorsqu'il passe a cette fonction, NbreClient = 2293560 mais je sais pas pourquoi et donc après dans cette fonction il y a une boucle for qui dépend de NbreClient et donc il fait la boucle 2293560 fois. Quand je débug il me met un message: Une violation d'accès (erreur de segmentation) est apparue dans votre programme.

Répondre à seb326

si tu pouvais faire un printf de NbreClients avant le for qui est dans Enregistrement.. parce que c'est louche
dans le for qui boucle tu modifies NbreClient ?


Message édité par Anonyme le 11-04-2008 à 23:34:04
Répondre à Anonyme

Je pense qu'il le modifie indirectement en écrasant la pile par un buffer overflow en modifiant une variable globale.
seb326 tu ferai mieux de montrer tout ton code, parce que le problème peut être partout, et probablement à l'initialisation de tes structures.


Message édité par CRicky le 12-04-2008 à 07:57:57
------------------------------ 6800A007B81300CD10B00131C989CF26880541
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky

Je veux bien mettre tout mon code mais il fait 700 lignes!!

Cart: Non je modifie jamais NbreClient, d'ailleurs dans saisieClient NbreClient n'est pas utilisé.

Répondre à seb326

Voici mon code, j'ai quand même retiré des fonctions car je pense pas que sa vient de celles ci puisqu'elle sont indépendantes des autres.
(fonctions retiré: Lister(), Modifier(Client *cellule), Supprimer(), Rechercher())
Merci d'avance pour ceux qui essayeront de comprendre mon code.

Code :
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <conio.h>
  4. #include <ctype.h>
  5. #include <string.h>
  6. #include <windows.h>
  7. #include <time.h>
  8. #define DIM_ID      9
  9. #define DIM_LISTE      5
  10. #define DIM_CHAINE      40
  11. #define DIM_NUMTEL      15
  12. #define DIM_CP          6 //6 pas 5 car \o fin de chaine de caractere
  13. #define DIM_NUM        7 // car il peut y avoir des bis,ter...
  14. #define DIM_DATE        30
  15. #define VRAI    1
  16. #define FAUX    0
  17. #define LGMAX 1000
  18. #define TAILLE_MAX 1000
  19. // Definition de la structure nommée Adresse
  20. typedef  struct Adresse
  21. {
  22.   char Num[DIM_NUM]; 
  23.   char Rue[DIM_CHAINE];
  24.   char CodePostal[DIM_CP] ;
  25. }Adresse ;
  26. // Definition de la structure nommée Client
  27. typedef struct Client
  28. {
  29.   char Identifiant[DIM_ID];
  30.   char NomEnt[DIM_CHAINE];
  31.   struct Adresse AdrEnt_Cli;
  32.   char NomCli[DIM_CHAINE];
  33.   char PrenomCli[DIM_CHAINE];
  34.   char MailCli[DIM_CHAINE];
  35.   char TelCli[DIM_NUMTEL];
  36.   char Date[DIM_DATE];
  37. }Client ;
  38. Client ListeClient[DIM_LISTE];
  39. Adresse LireAdresse ();
  40. void AfficheClient(Client *cellule)
  41. {
  42.   time_t t = time(NULL);
  43.   srand( time(NULL) );
  44.   time(&t);
  45.   printf ("\n Identifiant : %s", cellule->Identifiant);
  46.   printf ("\n Nom de l'entreprise : %s", cellule->NomEnt);
  47.   printf ("\n Adresse : %s, %s %s", cellule->AdrEnt_Cli.Num,cellule->AdrEnt_Cli.Rue,cellule->AdrEnt_Cli.CodePostal);
  48.   printf ("\n Nom du Client : %s", cellule->NomCli);
  49.   printf ("\n Prenom du Client : %s",cellule->PrenomCli);
  50.   printf ("\n Mail du Client : %s", cellule->MailCli);
  51.   printf ("\n Numero de Telephone du Client : %s", cellule->TelCli);
  52.   printf ("\n\n Date de creation : %s\n\n", ctime(&t));
  53. }
  54. int mail_valide(int j)
  55. {
  56.   int i = 0;
  57.   int d = 0;
  58.   while(i < strlen(ListeClient[j].MailCli) && d == 0)
  59.   {
  60.       if(ListeClient[j].MailCli[i] == '@' && i != 0 && i != strlen(ListeClient[j].MailCli)-1)
  61.       {
  62.           d = 1;
  63.       }
  64.       else
  65.       {
  66.           i++;
  67.       }
  68.   }
  69.   return d;
  70. }
  71. int telephone_valide(int j)
  72. {
  73.   int i = 0;
  74.   int d = 0;
  75.   if(strlen(ListeClient[j].TelCli) == 14)
  76.   {                         
  77.     d = 1;
  78.     if(ListeClient[j].TelCli[2] != '.' || ListeClient[j].TelCli[5] != '.' || ListeClient[j].TelCli[8] != '.' || ListeClient[j].TelCli[11] != '.')
  79.     {
  80.           d = 0;
  81.     }
  82.     while(i < strlen(ListeClient[j].TelCli) && d == 1)
  83.     {
  84.       if(ListeClient[j].TelCli[i] <= '0' && ListeClient[j].TelCli[i] >= '9' && ListeClient[j].TelCli[i] != '.')
  85.       {
  86.           d = 0;
  87.       }
  88.       else
  89.       {
  90.           i++;
  91.       }
  92.     }
  93.   }
  94.   return d;
  95. }
  96. void  SaisirClient(int i)
  97. {
  98.   char Identifiant[9];
  99.  
  100.   FILE *fichier;
  101.  
  102.   if ((fichier = fopen("annuaire.txt", "r" )) == NULL)
  103.   {
  104.       printf ("\n Impossible d'ouvrir le fichier annuaire.txt \n" );
  105.       exit(1);
  106.   }
  107.   system("CLS" );
  108.   printf (" Saisie du %d ieme Client: \n", i + 1 );
  109.   printf ("\n Entrez l'identifiant: " );
  110.   scanf ("%s", &ListeClient[i].Identifiant);
  111.   while(fscanf(fichier,"\n%[^*]*", &Identifiant)!=EOF) // tant que la fin du fichier n'est pas atteint
  112.   {
  113.       if(strcmp(Identifiant, ListeClient[0].Identifiant)==0)
  114.       {
  115.         printf ("\n Erreur: l'Identifiant existe deja. Recommencez: " );
  116.         scanf ("%s", &ListeClient[i].Identifiant);
  117.       }
  118.   } // fin du while
  119.   fclose(fichier);
  120.  
  121.   printf ("\n Entrez le nom de l'entreprise: " );
  122.   fflush (stdin);
  123.   gets (ListeClient[i].NomEnt);
  124.  
  125.   printf ("\n Entrez le numero de rue: " );
  126.   scanf ("%s",&ListeClient[i].AdrEnt_Cli.Num);
  127.  
  128.   printf ("\n Entrez le nom de la rue: " );
  129.   fflush (stdin);
  130.   gets (ListeClient[i].AdrEnt_Cli.Rue);
  131.   printf ("\n Entrez le Code Postal: " );
  132.   fflush (stdin);
  133.   gets (ListeClient[i].AdrEnt_Cli.CodePostal);
  134.  
  135.   printf ("\n Entrez le nom du Client: " );
  136.   fflush (stdin);
  137.   gets (ListeClient[i].NomCli);
  138.  
  139.   printf ("\n Entrez le prenom du Client: " );
  140.   fflush (stdin);
  141.   gets (ListeClient[i].PrenomCli);
  142.  
  143.   printf ("\n Entrez le mail: " );
  144.   scanf ("%s",&ListeClient[i].MailCli);
  145.   while(mail_valide(i) == 0)
  146.   {
  147.       printf ("\n Erreur: le mail est incorrect. Recommencez:" );
  148.       scanf ("%s",&ListeClient[i].MailCli);
  149.   }
  150.  
  151.   printf ("\n Entrez le numero de Telephone: " );
  152.   scanf ("%s",&ListeClient[i].TelCli);
  153.   while(telephone_valide(i) == 0)
  154.   {
  155.       printf ("\n Erreur: telephone incorrect (forme: 00.00.00.00.00). Recommencez:" );
  156.       scanf ("%s",&ListeClient[i].TelCli);
  157.   }
  158.   AfficheClient(&ListeClient[i]);
  159.   system("PAUSE" );
  160. }
  161. void Enregistrement(int NbreClients)
  162. {
  163.   char str[8];
  164.   char chainefic[1000];
  165.   int index;
  166.   int k;
  167.   int lg,i;
  168.   char newline[2]= "\n";
  169.  
  170.   time_t t = time(NULL);
  171.   srand(time(NULL));
  172.   time(&t);
  173.  
  174.   FILE *files;
  175.  
  176.   // a = mode d'ajout, rajouterez du texte à la fin du fichier
  177.   if ((files = fopen("annuaire.txt", "a+t" )) == NULL)
  178.   {
  179.       printf ("\n Impossible d'ouvrir le fichier annuaire.txt \n" );
  180.       exit(1);
  181.   }
  182.   for(i=0; i < NbreClients; i++)
  183.   {         
  184.               index = 0; 
  185.               k = 0;
  186.               // Enregistrement de l'identifiant
  187.               lg = strlen(ListeClient[i].Identifiant); //prend la taille de l'identifiant
  188.                 while (k < lg)
  189.                 {
  190.                       chainefic[index++] = ListeClient[i].Identifiant[k++];
  191.                 }
  192.                 chainefic[index++] = '*';
  193.              
  194.                 // Enregistrement du Nom de l'entreprise
  195.                 k = 0;
  196.                 lg = strlen(ListeClient[i].NomEnt);
  197.                 while (k < lg)
  198.                 {
  199.                       chainefic[index++] = ListeClient[i].NomEnt[k++];
  200.                 }
  201.                 chainefic[index++] = '*';
  202.              
  203.                 // Enregistrement du numéro de la rue
  204.    
  205.                 k =0;
  206.                 lg = strlen(ListeClient[i].AdrEnt_Cli.Num);
  207.                 while(k < lg)
  208.                 {
  209.                         chainefic[index++] = ListeClient[i].AdrEnt_Cli.Num[k++];
  210.                 }
  211.                 chainefic[index++] = '*';
  212.                 // Enregistrement de du nom de la rue
  213.                 k = 0;
  214.                 lg = strlen(ListeClient[i].AdrEnt_Cli.Rue);
  215.                 while(k < lg)
  216.                 {
  217.                         chainefic[index++] = ListeClient[i].AdrEnt_Cli.Rue[k++];
  218.                 }
  219.                 chainefic[index++] = '*';
  220.                 // Enregistrement du code postal
  221.                 k = 0;
  222.                 lg = strlen(ListeClient[i].AdrEnt_Cli.CodePostal);
  223.                 while(k < lg)
  224.                 {
  225.                         chainefic[index++] = ListeClient[i].AdrEnt_Cli.CodePostal[k++];
  226.                 }
  227.                 chainefic[index++] = '*';
  228.                
  229.                 // Enregistrement du Nom du Client
  230.                 k = 0;
  231.                 lg = strlen(ListeClient[i].NomCli);
  232.                 while(k < lg)
  233.                 {
  234.                         chainefic[index++] = ListeClient[i].NomCli[k++];
  235.                 }
  236.                 chainefic[index++] = '*';
  237.              
  238.                 // Enregistrement du Prénom du Client
  239.                 k = 0;
  240.                 lg = strlen(ListeClient[i].PrenomCli);
  241.                 while(k < lg)
  242.                 {
  243.                         chainefic[index++] = ListeClient[i].PrenomCli[k++];
  244.                 }
  245.                 chainefic[index++] = '*';
  246.              
  247.                 // Enregistrement du Mail
  248.                 k = 0;
  249.                 lg = strlen(ListeClient[i].MailCli);
  250.                 while(k < lg)
  251.                 {
  252.                         chainefic[index++] = ListeClient[i].MailCli[k++];
  253.                 }
  254.                 chainefic[index++] = '*';
  255.              
  256.                 // Enregistrement du Numéro de Téléphone
  257.                 k = 0;
  258.                 lg = strlen(ListeClient[i].TelCli);
  259.                 while(k < lg)
  260.                 {
  261.                         chainefic[index++] = ListeClient[i].TelCli[k++];
  262.                 }
  263.                 chainefic[index++] = '*';
  264.                
  265.                 // Enregistrement de la date de creation
  266.                 k = 0;
  267.                 lg = strlen(ctime(&t));
  268.                 while(k < (lg-1))
  269.                 {
  270.                         chainefic[index++] = ctime(&t)[k++];
  271.                 }
  272.                 chainefic[index++] = '*';
  273.                 chainefic[index++] = '\0';
  274.                
  275.                 // Ecrire le resultat dans le fichier et revenir à la ligne !!
  276.                 fprintf(files,newline);
  277.                 fputs(chainefic,files);
  278.   }
  279.   fclose(files);
  280. }
  281. int main()
  282. {
  283.   int continuer;
  284.   int NbreClients;
  285.   int c,i;
  286.   int Sortie = FAUX;
  287.    
  288.   while(!Sortie)
  289.   {
  290.      
  291.         system("CLS" );
  292.         printf("\n\t****************************************\n" );
  293.         printf("\n\t\tGestion de l'annuaire Clients\n" );
  294.         printf("\n\t****************************************\n" );
  295.         printf("\n\t\tA :     Ajouter" );
  296.         printf("\n\t\tR :     Rechercher" );
  297.         printf("\n\t\tM :     Modifier" );
  298.         printf("\n\t\tS :     Supprimer" );
  299.         printf("\n\t\tL :     Lister" );
  300.         printf("\n\t\tQ :     Quitter\n" );
  301.         printf("\n\t****************************************\n" );
  302.         printf("\n\t\tChoix  <A, R, M, S, L, Q> : " );
  303.         c = getchar();
  304.         switch(c)
  305.         {
  306.           case 'a':
  307.           case 'A':
  308.             system("CLS" );
  309.             printf (" Fonction ajouter: \n" );
  310.        
  311.             printf("\n Combien de clients voulez-vous ajouter? " );
  312.             scanf("%d", &NbreClients);
  313.        
  314.             for (i = 0; i < NbreClients; i++)
  315.               {
  316.                 SaisirClient(i);
  317.             }
  318.          
  319.             Enregistrement(NbreClients);
  320.            
  321.           break; // CASE1
  322.           case 'r':
  323.           case 'R':
  324.             system("CLS" );
  325.             printf(" Fonction Rechercher: \n" );
  326.             if (Rechercher() == 0)
  327.             {
  328.                 AfficheClient(&ListeClient[0]);
  329.             }
  330.             else
  331.             {
  332.                 printf("Erreur de recherche : la fiche du client n'existe pas ou erreur de saisie" );
  333.             }
  334.             printf("\n\n" );
  335.             system("PAUSE" );
  336.           break; // CASE2
  337.           case 'm':
  338.           case 'M':
  339.             system("CLS" );
  340.             printf(" Fonction Modifier: \n" );
  341.             if (Rechercher() == 0)
  342.             {
  343.                 Modifier(&ListeClient[0]);
  344.             }
  345.             else
  346.             {
  347.                 printf("Erreur de recherche : la fiche du client n'existe pas ou erreur de saisie" );
  348.             }
  349.             printf("\n\n" );
  350.             system("PAUSE" );
  351.           break; // CASE3
  352.          
  353.           case 's':
  354.           case 'S':
  355.             system("CLS" );
  356.             printf(" Fonction Supprimer: \n" );
  357.             Supprimer();
  358.             printf("\n\n" );
  359.             system("PAUSE" );
  360.           break; // CASE5
  361.           case 'l':
  362.           case 'L':
  363.             system("CLS" );
  364.             printf(" Fonction Lister: \n" );
  365.             Lister();
  366.             printf("\n\n" );
  367.             system("PAUSE" );
  368.           break; // CASE6
  369.           case 'q':
  370.           case 'Q':
  371.               Sortie = FAUX;
  372.               continuer = VRAI;
  373.               system("CLS" );
  374.               printf(" FIN APPLICATION\n" );
  375.               printf("\n Quitter l'Application <O,N>? " );
  376.               while(continuer)
  377.               {
  378.                   c = getchar ();
  379.                   switch(c)
  380.                   {
  381.                     case 'o':       
  382.                     case 'O':
  383.                       continuer = FAUX;
  384.                       Sortie = VRAI;
  385.                     break;
  386.                  
  387.                     case 'n':
  388.                     case 'N':
  389.                       continuer = FAUX;
  390.                     break;
  391.                   }
  392.               }
  393.           break;
  394.              
  395.           default :
  396.           break;
  397.         }
  398.         if(Sortie)
  399.         {
  400.             break;
  401.         }
  402.   }
  403.   return 0;
  404. }


Message édité par seb326 le 12-04-2008 à 11:11:25
Répondre à seb326

J'ai fait comme ma conseillé Cart de mettre des printf (j'ai saisie comme valeur pour NbreClient = 2 pour qu'il fasse la boucle deux fois), j'en ai mis un avant le for (il met la bonne valeur: 2), un dans le for avant l'appelle de la fonction SaisieClient, premier tour c bon il m'affiche 2, met le 2eme tour, il m'affiche 2293560. Donc le problème doit venir de la boucle enfin je sais pas, je comprend vraiment pas ce qui se passe!!

Répondre à seb326

en effet c'est assez long, pour situer mieux le problème, affiches nbreClient après chaque while qui sont dans le for, numérotes les printf pour pouvoir les discerner

Répondre à Anonyme

Ok je vais essayé, et merci encore de m'aider

Répondre à seb326

J'ai essayé mais le problème vient d'avant la fonction enregistrer car NbreClients =2293560 avant la fonction enregistrer, mais le problème c'est que je n'utilise pas NbreClient dans les fonction d'avant donc normalement sa devrai pas changer!!

Répondre à seb326

J'ai l'impression que sa vient du code suivant ce trouvant dans le début de la Fonction SaisieClient:

Code :
  1. while(fscanf(fichier,"\n%[^*]*", &Identifiant)!=EOF) // tant que la fin du fichier n'est pas atteint
  2.   {
  3.       if(strcmp(Identifiant, ListeClient[i].Identifiant)==0)
  4.       {
  5.         printf ("\n Erreur: l'Identifiant existe deja. Recommencez: " );
  6.         scanf ("%s", &ListeClient[i].Identifiant);
  7.       }
  8.   } // fin du while



En effet, quand je met ce bout de code en commentaire, sa fonctionne!!
Mais je vois pas en quoi sa modifierai NbreClients.

Répondre à seb326

seb326 a écrit :

J'ai essayé mais le problème vient d'avant la fonction enregistrer car NbreClients =2293560 avant la fonction enregistrer, mais le problème c'est que je n'utilise pas NbreClient dans les fonction d'avant donc normalement sa devrai pas changer!!


C'est possible. En mémoire, les variables sont placées les unes après les autres. Si tu es sur une variable et que tu dépasses la taille, tu vas écrire sur une autre variable (sans savoir laquelle). C'est ce qui s'appelle le "buffer overflow".

Dans ton code, je vois que DIM_LISTE n'est utilisé que 2 fois : dans le #define et l'initialisation du tableau. ça veut donc dire, que tu ne fait aucun contrôle de dépassement de taille. Tu dois toujours faire des contrôles lorsque tu ajoutes quelque chose que ce soit un nouvel élément ou une chaine, pour justement éviter les buffers overflow.

Lorsque, comme je te l'avais suggéré, tu auras mis tous ces contrôles, tu remettras ton code, et je le lirai.
Ton programme n'est pas très complexe. Je pense, qu'en y ajoutant tous les contrôles, tu trouveras facilement le problème.

------------------------------ 6800A007B81300CD10B00131C989CF26880541
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky
Tom's Guide > Forum > Programmation > Problème écriture dans un fichier en language C
Aller à :

Il y a 831 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

Attention

Vous allez répondre sur un sujet resté inactif pendant plus de 6 mois.
Assurez-vous d'apporter des éléments nouveaux à la discussion avant de poursuivre.

Répondre Annuler
Liens