Bonjour,
je m'entraine au langage C, par exemple je viens
de mettre en oeuvre ce simple programme (essai.c) :
>#include <stdio.h>
>#define STR_LEN 180
>int main (int argc, char *argv[])
>{
> char *file,*str ;
> FILE *fd ;
> file=argv[1] ;
> fd=fopen(file,"r") ;
> while ( ! feof(fd) ) {
> fgets(str,STR_LEN,fd) ;
> fputs(str,stdout) ;
> }
> fclose(fd) ;
> return 0 ;
>}
ce programme lit simplement ligne par ligne le fichier
donne en 1er argument, et le restitue aussi ligne par ligne
sur la sortie standard, rien d'extraordinaire me diriez-vous ! sauf peut etre la "segmentation fault" que j'obtiens en
fin d'execution :
la compilation ( gcc -Wall essai.c ) se passe sans pb,
mais l'execution ( par exemple ./a.out essai.c ) donne :
>#include <stdio.h>
>#define STR_LEN 180
>int main (int argc, char *argv[])
>{
> char *file,*str ;
> FILE *fd ;
> file=argv[1] ;
> fd=fopen(file,"r") ;
> while ( ! feof(fd) ) {
> fgets(str,STR_LEN,fd) ;
> fputs(str,stdout) ;
> }
> fclose(fd) ;
> return 0 ;
>}
>}
> 932: symbol=fclose; lookup in file=./a.out
> 932: symbol=fclose; lookup in >file=/lib/libc.so.6
> 932: symbol=fclose; lookup in file=./a.out
> 932: symbol=fclose; lookup in >file=/lib/libc.so.6
>lookup 0x08048000 0x000001ec -> 0x4001f000 0x0005f470 /1 >fclose
> 932: symbol=free; lookup in file=./a.out
> 932: symbol=free; lookup in file=/lib/libc.so.6
>Segmentation fault
Le programme restitue bien le fichierr essai.c mais
il lit deux fois la derniere ligne ( pourquoi ? )
et surtout il fait une "Segmentation fault" a la fin
d'ou je ne vois qu'elle puisse venir.
Les lignes de debugage 932... n'apparaissent pas tout le
temps, cela depend du fichier lu ! par contre la seg fault
est toujours au rendez-vous.
J'ai essaye de compiler le programme avec des options
de debugage mais cela n'eclaire pas plus le pb,
je m'en remets a vos yeux plus experts que les miens
En vous remerciant pour votre aide
Amicalement
Deb
Poste le Monday 6 June 2005 11:23:42