#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
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
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
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
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
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
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
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
et : -O9
Ça me fait toujours marrer ce genre de chose
Tu devrais essayer -O42
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