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 11/03/2008, à 22:37

beudet

erreur de segmentation (core dumped) en c

Bonjour à tous, j'ai une erreur de segmentation mais je n'arrive pas à voir ce qui ne va pas. J'ai utilisé gdb et valgrind mais je ne trouve toujours pas. Pourriez vous m'aider?????

#include <stdio.h>

#include <stdlib.h>

#include <string.h>


int main(int argn, char *argv[])

{

  FILE *fic_entree;

  FILE *fic_dest;

  char *Tab;

  int i,nb=1;

  char Ces[5];

  char *Nom_fic;

  

  if (argn!=2){

         printf("nombre d'arguments incorrect");

         exit (1);

         }

           

  fic_entree=fopen(argv[1],"r");

  

  if (fic_entree==NULL){

           perror("fopen");

           exit(2);

           }

  

  Ces[0]='.';

  Ces[1]='c';

  Ces[2]='e';

  Ces[3]='s';

  Ces[4]='\0';

  

  strcpy(argv[1],Nom_fic);

  strcat(Ces,Nom_fic);

  

  fic_dest=fopen(Nom_fic,"w");


  

  if (fic_entree==NULL){

           perror("fopen");

           exit(3);

           }

           

  Tab=(char*)malloc(sizeof(char)*512) ; 
       

 nb=fread(Tab,sizeof(char),512,fic_entree);


 do{

      for (i=0;i<=nb;i++){

          Tab[i]=toupper(Tab[i]);

          if ((Tab[i]>='A')&&(Tab[i]<='Z')){

                   if (Tab[i]>'W'){

                         Tab[i]=Tab[i]-23;

                         }

                    Tab[i]=Tab[i]+3;

                    fwrite(Tab,sizeof(char),1,fic_dest);     

                    }

                    

                    }  

    

}while(!feof(fic_entree));

  

fclose(fic_entree);

fclose(fic_dest);  

  

  exit(0);

  

}

Merci d'avance!!

Hors ligne

#2 Le 11/03/2008, à 23:05

abetsic

Re : erreur de segmentation (core dumped) en c

fais un man strcpy... (et utilise strncpy au passage).

Hors ligne

#3 Le 11/03/2008, à 23:10

beudet

Re : erreur de segmentation (core dumped) en c

comment formule t-on un strncpy dans ce cas là??
dsl j'ai pas les manuels.

Dernière modification par beudet (Le 11/03/2008, à 23:16)

Hors ligne

#4 Le 12/03/2008, à 20:06

darky0505

Re : erreur de segmentation (core dumped) en c

beudet a écrit :

comment formule t-on un strncpy dans ce cas là??
dsl j'ai pas les manuels.

http://www.linux-france.org/article/man-fr/man3/strcpy-3.html

;-)

si tu arrives à utiliser cette fonction et que ton programme ne fonctionne toujours pas j'y jetterai un oeil smile


DarkY

Hors ligne

#5 Le 12/03/2008, à 20:28

Mathieu147

Re : erreur de segmentation (core dumped) en c

Déjà tu peux faire Ces = ".ces" tu gagnerais du temps tongue

Et puis indente ton code correctement et ne passe pas plein de lignes vides, c'est pas lisible.

Sinon, tu crois pas qu'il faut replacer

for (i=0;i<=nb;i++)

par

for (i=0;i<nb;i++)

?


Pffff…

Hors ligne

#6 Le 12/03/2008, à 21:10

Link31

Re : erreur de segmentation (core dumped) en c

Mathieu147 a écrit :

Et puis indente ton code correctement et ne passe pas plein de lignes vides, c'est pas lisible.

Je crois que ça vient du forum, ou du copier-coller... je ne sais pas précisément de quoi ça vient, mais j'ai déjà vu assez souvent ce genre de choses sur ce forum. Et personne de censé ne prendrait la peine de sauter une ligne supplémentaire à chaque ligne de code wink

Hors ligne

#7 Le 12/03/2008, à 22:43

Matchek

Re : erreur de segmentation (core dumped) en c

as - tu compilé avec "gcc -Wall -Werror f.c -o f.out"??


Ubuntu 9.04 x86-32 / Gnome

Hors ligne

#8 Le 12/03/2008, à 22:51

darky0505

Re : erreur de segmentation (core dumped) en c

Matchek a écrit :

as - tu compilé avec "gcc -Wall -Werror f.c -o f.out"??

je dirai meme plus, -pedantic


DarkY

Hors ligne

#9 Le 12/03/2008, à 23:03

Matchek

Re : erreur de segmentation (core dumped) en c

pas mal darky0505!:P


Ubuntu 9.04 x86-32 / Gnome

Hors ligne

#10 Le 12/03/2008, à 23:13

Link31

Re : erreur de segmentation (core dumped) en c

Je dirais même plus : -W (ou -Wextra) et -std=c99 smile

Ce qui donne : -W -Wall -Werror -std=c99 -pedantic
(qui sont au passage les options de compilation que tout le monde devrait utiliser systématiquement)

Hors ligne

#11 Le 12/03/2008, à 23:24

Matchek

Re : erreur de segmentation (core dumped) en c

et : -O9
ça c'est pour optimiser, par exemple pouvoir afficher une boucle infinie (sans erreur de dépassement) (comme la commande yes dans un terminal)


Ubuntu 9.04 x86-32 / Gnome

Hors ligne

#12 Le 12/03/2008, à 23:44

YokoUno

Re : erreur de segmentation (core dumped) en c

je ne sais pas précisément de quoi ça vient, mais j'ai déjà vu assez souvent ce genre de choses sur ce forum. Et personne de censé ne prendrait la peine de sauter une ligne supplémentaire à chaque ligne de code

A mon avis, ça provient d'un fichier original au format DOS/Win (retours chariot \r\n) ouvert sous ubuntu, par exemple par gedit.
Puis copier/coller depuis gedit.

#13 Le 13/03/2008, à 00:01

Link31

Re : erreur de segmentation (core dumped) en c

Matchek a écrit :

et : -O9

Ça me fait toujours marrer ce genre de chose lol

Tu devrais essayer -O42 tongue

Hors ligne

#14 Le 13/03/2008, à 01:44

YokoUno

Re : erreur de segmentation (core dumped) en c

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

#define BUFSIZE 512

int main(int argn, char *argv[])
{
   FILE *fic_entree;
   FILE *fic_dest;

   char Tab[BUFSIZE];   /* une alloc statique suffit      */

   /* int i;               inutile dans main()            */
   /* int nb=1;            complètement inutile           */
   /* char Ces[5];         idem                           */

   char *Nom_fic;

   if (argn!=2) {
      printf("nombre d\'arguments incorrect");
      exit (1);
   }

   fic_entree = fopen(argv[1], "r");

   if (!fic_entree) {
      perror("fopen sur entree");
      exit(2);
   }

   Nom_fic = (char*) malloc(strlen(argv[1]) + strlen(".ces") +1);    /* réservation d'espace! */
   
   strcpy(Nom_fic, argv[1]);              /* la destination est à gauche */
   strcat(Nom_fic, ".ces");               /* idem                        */

   fic_dest = fopen (Nom_fic, "w");

   free(Nom_fic);

   if (!fic_dest)           /* au lieu de fic_entree : oui c'est vicieux un copier/coller :P */
   {
      perror("fopen sur sortie");
      fclose (fic_entree);
      exit(3);
   }

   /* on a intéret à mettre le fread dans la boucle si on veut lire tout le fichier... */

   while (nb = fread(Tab,1,BUFSIZE,fic_entree)) 
   {
      int i;

      for (i=0; i<nb; i++)
      {
         Tab[i] = toupper(Tab[i]);

         if (Tab[i]>='A' && Tab[i]<='Z')
         {
            if (Tab[i]>'W')
               Tab[i] = Tab[i]-23;

            Tab[i] = Tab[i]+3;
            fwrite(Tab,1,1,fic_dest);     
         }
      }     
   }
   
   fclose(fic_entree);
   fclose(fic_dest);  
   exit(0);
}

Pas essayé, mais déjà ça devrait aller un peu mieux roll